PhoneGap InAppBrowser:打开iOS Safari浏览器

Vil*_* M. 4 ios cordova inappbrowser

在我们的PhoneGap iOS应用程序中,我们使用InAppBrowser插件显示一些内容,我们需要在InAppBrowser中打开Safari中的页面.

我们怎么能有从链接的InAppBrowser在Safari中打开?

Ada*_*tle 6

phonegap文档:

在新的InAppBrowser实例,当前浏览器实例或系统浏览器中打开URL.

var ref = window.open(url, target, options);
Run Code Online (Sandbox Code Playgroud)
  • ref:引用InAppBrowser窗口.(InAppBrowser)
  • url:要加载的URL(String).如果URL包含Unicode字符,则在此处调用encodeURI().
  • target:加载URL的目标,默认为_self的可选参数.(串)

    • _self:如果URL在白名单中,则在Cordova WebView中打开,否则在InAppBrowser中打开.
    • _blank:在InAppBrowser中打开.
    • _system:在系统的Web浏览器中打开.

所以要回答你的问题,请使用:

window.open(your_url, '_system', opts);
Run Code Online (Sandbox Code Playgroud)

请注意,域名需要列入白名单.


2014年4月25日更新:

我想我有点误解了这个问题(感谢评论者@peteorpeter) - 你希望有一些方法可以点击InAppBrowser中的链接并在系统浏览器中打开它(例如iOS上的Mobile Safari).这是可能的,但需要在应用程序开发人员和负责页面链接的人员之间进行一些深思熟虑和合作.

创建IAB实例时,您将获得对它的引用:

var ref = window.open('http://foo.com', '_blank', {...});
Run Code Online (Sandbox Code Playgroud)

您可以在该引用上注册一些事件侦听器:

ref.addEventListener('loadStart', function(event){ ... });
Run Code Online (Sandbox Code Playgroud)

每次IAB的URL更改时(例如,单击链接,服务器返回302等等),都会触发此特定事件,您可以检查新URL.

要进入系统浏览器,您需要在URL中定义某种标志.你可以做任何事情,但是对于这个例子,让我们假设systemBrowserurl中有一个标志:

..... HTML?富= 1&systemBrowser =真

您将在事件处理程序中查找该标志,并在找到时将其踢出系统浏览器:

ref.addEventListener('loadStart', function(event){
    if (event.url.indexOf('systemBrowser') > 0){
        window.open(event.url, '_system', null);
    }
});
Run Code Online (Sandbox Code Playgroud)

请注意,这不是检测URL中标记的最佳方法(可能导致误报),我很确定PhoneGap白名单规则仍然适用.

  • 'loadstart'必须全部小写,'loadStart'不起作用.此外,这不会阻止链接在InAppBrowser中加载,它会在Safari中加载. (3认同)