【问题标题】:Consistent way to open links from Phonegap app in both Android and iOS?从 Android 和 iOS 中的 Phonegap 应用程序打开链接的一致方式?
【发布时间】:2013-03-25 15:37:09
【问题描述】:

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


<a href="http://blah">
始终在应用程序中打开,没有浏览器工具栏,并且在不终止应用程序的情况下无法返回应用程序。 iOS 遵守 config.xml 中的 <access origin="http://blah" />,但 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,所以 this solution 将不起作用。
官方文档参考this blog post,参考1.5.0版本写的,我的2.1.0到2.3.0发现与他们的表不匹配。
我真的不想为这么简单的东西添加插件。

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

【问题讨论】:

    标签: cordova


    【解决方案1】:

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

    openURL: function(url) {
        if(device.platform === 'Android') {
            navigator.app.loadUrl(url, {openExternal:true});
        } else {
            window.open(url, '_system');
        }
    },
    

    【讨论】:

    • 几个月后,我终于又开始解决这个问题了。感谢您提供的出色代码 sn-p。我正在使用稍微不同的第 5 行:window.open(url, '_system', 'location=no') 我必须将 添加到我的配置中.xml
    • 这是一个您使用url 调用的函数。将它放在适合您的代码库的任何位置。就我而言,它是Backbone.View 上的一种方法。
    • 我有一个问题...为什么是'location=no'@MagnusSmith?这个是来做什么的?谢谢!
    • w3schools.com/jsref/met_win_open.asp - 它只是告诉浏览器不要显示地址栏(虽然它可能与Phonegap无关,我承认!)。
    【解决方案2】:

    我只是想指出,我自己并没有真正做到这一点,但是您是否使用了 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.
    

    【讨论】:

    • 我一直希望我可以避免使用插件来做一些简单的事情,比如在网页上显示链接! (注意,本机 window.open 没有用。)
    【解决方案3】:

    你需要安装 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 = '/#';
    
              });
    }
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 我刚刚尝试过,并且....这些都在 Android 和 iOS 应用程序的 web 视图中打开。不过感谢您的建议。
      • @MagnusSmith - 这有点难过。听起来他们必须为此将本机 API 放入 Cordova。也许有人已经写了一个插件?
      猜你喜欢
      • 2017-02-22
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 2017-02-10
      • 2019-09-14
      • 2013-09-11
      • 2013-06-09
      • 1970-01-01
      相关资源
      最近更新 更多