【问题标题】:PhoneGap Build: how to open external url in device browser on Android?PhoneGap Build:如何在 Android 设备浏览器中打开外部 url?
【发布时间】:2013-03-10 04:50:21
【问题描述】:

在我的 PhoneGap Android 应用程序的系统浏览器中无法打开外部 URL。我正在使用 PhoneGap Build 2.3.0。

根据Cordova documentation我使用了目标'_system':

window.open('http://www.myurl.nl', '_system');

在我的 config.xml 我有:

<plugin name="InAppBrowser" value="org.apache.cordova.InAppBrowser" />
<access origin="*" browserOnly="true" />

但链接仍然在我的应用程序 web 视图中打开。

如何解决?

【问题讨论】:

  • 在我看来,默认情况下它在 Android 中运行良好(但我也在使用 Crosswalk 插件......)。在此处查看我的 2015 年答案以在 WebView 中打开 _self,并在外部浏览器中打开 _blankstackoverflow.com/questions/32208609/…

标签: javascript android cordova phonegap-build


【解决方案1】:

@George Siggouroglou:对于最终将在文档中出现多次的元素使用 id 并不是一个好主意。相反,使代码更加模块化是一种很好的做法。

如果期待触摸设备,在“点击”之前使用“点击”也是一个不错的选择,因为它比点击更快更早地触发。要检查支持触摸的东西,我更喜欢使用modernizr,因为它使特征检测变得轻而易举。

jQuery Mobile 点击事件在单个目标对象上发生的快速、完整的触摸事件之后触发。它相当于标准点击事件的手势,由触摸手势的释放状态触发。 https://api.jquerymobile.com/tap/

希望对某人有所帮助

**html code:**

<a class="ext-link" href="#">Google it</a>

<button class="ext-link" href="#">Google it</button>

Javascript(使用 jQuery):

//define tap or click event type on root level (can be combined with modernizr)
iaEvent = "click";
if (typeof navigator !== "undefined" && navigator.app) {
   iaEvent = "tap";
}
$('.ext-link').each.bind(iaEvent, function() {
    if (typeof navigator !== "undefined" && navigator.app) {
        // Mobile device.
        var linktarget = this.attr("href");
        navigator.app.loadUrl(linktarget, {openExternal: true});
    } else {
        // Possible web browser
        window.open(linktarget, "_blank");
    }
});

【讨论】:

    【解决方案2】:

    迟到的答案,但可能对某人有帮助。

    navigator.app.loadUrl('https://google.com/', { openExternal:true });
    

    科尔多瓦 3.3.1

    【讨论】:

    • 这对我来说非常有问题,即使链接只被点击一次,我的应用也会加载多个标签!
    • 我也是,我最终使用 Hammer JS 来监听点击事件,这阻止了链接多次打开。
    • Android 上的越野车。链接在浏览器中打开,但随后应用重新成为焦点。
    【解决方案3】:

    这对我有用。 Phonegap 3.1.0。

    html代码:

    <a id="ext-link" href="#">Google it</a>
    

    <button id="ext-link" href="#">Google it</button>
    

    Javascript(使用 jQuery+cordova):

    $("#ext-link").on("click"), function() {
        if (typeof navigator !== "undefined" && navigator.app) {
            // Mobile device.
            navigator.app.loadUrl('http://www.google.com/', {openExternal: true});
        } else {
            // Possible web browser
            window.open("http://www.google.com/", "_blank");
        }
    });
    

    希望对您有所帮助。

    【讨论】:

    • 没有帮助我 04-11 11:47:48.186: E/Web Console(22063): Uncaught TypeError: Cannot call method 'loadUrl' of undefined:88
    【解决方案4】:

    这个问题现在有点老了,但我觉得值得更新。现在,当与 2.9.0 一起使用时,这可以与 PhoneGap Build 一起正常工作。

    我已经在 Android 4.3 和 iOS 6.1.3 上编译并测试了它。我的应用程序中没有 InAppBrowser 插件,因为它是在应用程序中打开页面,而不是导致本机浏览器打开它们,并且我只有以下访问标签:

    <access origin="http://127.0.0.1*"/>
    <access origin="http://phonegap.com" subdomains="true" />
    

    【讨论】:

    • 使用phonegap 3.0,android cli build
    【解决方案5】:

    当您想继续使用 PhoneGap Build 时,这不是答案,但我通过在我的机器上为 Cordova (PhoneGap) 设置开发环境并在本地编译应用程序解决了这个问题。在 Cordova 2.5.0 window.open('http://www.myurl.nl', '_system'); 完美运行,它会在系统浏览器中打开链接。

    所以我的建议是停止使用 PhoneGap Build 并开始在本地编译您的应用程序。 Here's how to set up your development environment for Cordova >>

    【讨论】:

    • 你能解释一下与本地编译和 phonegap 构建有什么区别吗?
    • 主要区别在于设置。在本地编译时,更改某些设置会更容易。但是由于 PhoneGap Build 上的 Cordova 2.5 与本地安装时的结果不同,所以核心代码肯定有一些差异,但不知道为什么。
    • @Joan 真的我不确定这是一个 phonegap 构建问题。您确定您使用了适当的插件声明,并且该插件已通过 Phonegap 有效地加载到您的应用程序中吗?我见过有人使用gap:plugin 而不是plugin 标签,值得一试
    【解决方案6】:

    使用这个

    window.open('http://www.myurl.nl', '_blank', 'location=yes');

    【讨论】:

    • 你为什么拒绝这条评论?如果您在 phonegap 网站上查看,此命令行是 InAppBrowser 安装指南的 c/p...github.com/apache/cordova-plugin-inappbrowser/blob/dev/doc/…您的配置文件也应该被否决
    • 您应该提到您的解决方案需要 InAppBrowser 插件才能工作。否则不会。
    • 感谢提示'location=yes'。我在其他地方看到它是 = 否,我无法让它工作。
    • 答案是向后的...传递 _blank 明确指示 Cordova 不要在系统浏览器中打开它!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多