Phonegap 2.9.0无法在默认浏览器中打开外部链接

T4d*_*deu 5 phonegap-plugins cordova phonegap-build

我想要做的就是超级简单,在设备浏览器上打开一个链接,但它显示出比我想象的更难.

我创建项目并添加ios和android平台:

$ phonegap create project_name
$ phonegap build ios
$ phonegap build android
Run Code Online (Sandbox Code Playgroud)

我有 ; 在config.xml内部(尝试了不同的方式,没有工作)和"stay-in-webview"设置为false.

我在www/index.html文件中做的唯一更改是添加链接,页面包含所有默认脚本(phonegap.js,js/index.js和对app.initialize()的调用).

我尝试了所有这些链接,都在webview中打开:

<a href="#" onclick="window.open('http://www.google.com', '_blank', 'location=yes');">_blank</a>
<a href="#" onclick="window.open('http://www.google.com', '_system', 'location=yes');">_system</a>
<a href="#" onclick="window.open('http://www.google.com', '_system');">_system</a>
<a href="http://www.google.com" target="_blank">target _blank</a>
<a href="http://www.google.com">no target</a>
Run Code Online (Sandbox Code Playgroud)

明确我在ios模拟器和android模拟器中完成的所有测试.

我搜索了很多,尝试了我发现的一切,但没有任何作用.谢谢你的帮助

ᴠɪɴ*_*ᴇɴᴛ 11

要在设备的默认浏览器中打开Cordova/PhoneGap应用程序中的链接,您必须确保window.open(<url>, '_system');将使用它来访问它.为了实际工作 - 可能有点反直觉 - 你需要启用'InAppBrowser'插件.

在Cordova版本2.9.0中,"InAppBrowser"插件是内置的,您只需要确保它没有在Cordova中注释掉config.xml.从版本3.0.0开始,您必须通过从项目目录运行此命令来安装插件:

cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-inappbrowser.git
Run Code Online (Sandbox Code Playgroud)

从"InAppBrowser"如何使用第二个参数的科尔多瓦文档targetwindow.open()在被覆盖的实现:

target:加载URL的目标,默认为可选参数_self.(字符串)

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

为了分离问题并防止我忘记在默认浏览器中onclick为每个<a/>我想要打开的属性添加属性,我喜欢通过JavaScript动态附加该行为.下面是一个使用jQuery的示例,其中在通过XHR重新加载所涉及的HTML之后,还将重新附加行为.并且它只会附加到外部链接,因此也会阻止将其附加到mailto:链接.

$('#idContentwrapper').on('click', '.colofon-text a', function(event) {
    var href = $(this).attr('href');
    if (typeof href !== 'undefined' &&
        href.substr(0, 7) === 'http://')
    {
        event.preventDefault();
        // Open in default browser App (on desktop: open in new window/tab)
        window.open(this.href, '_system', 'location=no');
    }
});
Run Code Online (Sandbox Code Playgroud)