19

我有一个使用 Phonegap 制作的移动应用程序,它显示可能包含链接的新闻文章。我希望这些链接在适当的浏览器中打开,与应用程序分开。在我从 Phonegap 版本升级到 2.0.0 到 2.1.0 后,我找不到在 Android 和 iOS中提供相同结果的单一方法(因为在 2.1 之前的 iOS 中您无法旋转屏幕)。


<a href="http://blah">
始终在应用程序中打开,没有浏览器工具栏,并且在不终止应用程序的情况下无法返回应用程序。iOS<access origin="http://blah" />在 config.xml 中服从,但 Android 不服从。似乎都不关心该browserOnly="true"属性。

<a href="http://blah" target="_blank">
<access>如果允许(或完全省略), iPhone 会在 Safari 浏览器中打开它,但 Android 会在应用程序中打开它。

<preference name="stay-in-webview" value="false" />
将此添加到 config.xml 完全没有区别。

<a href="#" onClick="navigator.app.loadUrl('http://blah',{openExternal:true});return false;">
仅在 Android 中受支持,它会在 Chrome 浏览器中打开链接。iOS 中的错误。

<a href="#" onClick="window.open('http://blah','_blank','location=yes');return false;">
在 Phonegap 2.3.0 版中,这将保留在应用程序中,但在顶部/底部显示一个看起来很便宜的浏览器工具栏,并带有一个按钮,可让您返回应用程序。这是一致的......但不是我想要的。(在 2.1.0 版本中,这会导致 Android 在应用程序中打开,而 iOS 在适当的浏览器中打开。)


我正在使用 Phonegap Build,所以这个解决方案不起作用。
官方文档是参考 1.5.0 版本编写的这篇博文,我的 2.1.0 到 2.3.0 发现与他们的表不匹配。
我真的不想为这么简单的东西添加插件。

是否有一段代码会导致在设备自己的浏览器中打开链接,在应用程序的 web 视图之外,无论操作系统如何?

4

4 回答 4

8

也许现在还为时不晚。无论如何,这是来自我们的代码库,它适用于两个平台。

openURL: function(url) {
    if(device.platform === 'Android') {
        navigator.app.loadUrl(url, {openExternal:true});
    } else {
        window.open(url, '_system');
    }
},
于 2013-09-20T14:43:43.493 回答
1

您需要安装 inAppBrowser 插件并在 jQuerys .on('click') 方法的帮助下运行此函数 onDeviceReady 函数,如下所示

function hijack_externalLinks(){

    $(document).on('click', "a[href^='http://']", function (e) {

         window.open( this.href , '_system', 'location=yes' );
         this.href = '/#';

          });
}
于 2014-07-25T16:09:00.547 回答
1

我只是想指出,我自己并没有真正做到这一点,但是您是否使用了 inAppBrowser 插件,您是否在 config.xml 中指定了具有必要权限的插件?

根据这个http://docs.phonegap.com/en/3.3.0/cordova_inappbrowser_inappbrowser.md.html#InAppBrowser你应该使用:

var ref = window.open(url, target, options);

target: The target in which to load the URL, an optional parameter that defaults to _self. (String)

_self: Opens in the Cordova WebView if the URL is in the white list, otherwise it opens in the InAppBrowser.
_blank: Opens in the InAppBrowser.
_system: Opens in the system's web browser.
于 2013-12-23T00:57:14.373 回答
0

PhoneGap 2.5.0 文档说它支持“_blank”、“_self”、“_system”目标 - 这些中的任何一个都可以满足您的需要吗?我在这里猜测是因为我还没有建立一个合适的测试环境,还不能尝试这个。

于 2013-03-25T15:43:32.403 回答