Phonegap window.open 在 Android 上不起作用

Posted

技术标签:

【中文标题】Phonegap window.open 在 Android 上不起作用【英文标题】:Phonegap window.open does not work on Android 【发布时间】:2013-05-02 17:55:41 【问题描述】:

我有一个基于 cordova 2.6 和 jqm 1.3 的 ios/android 应用程序。用户单击按钮后,我需要打开指向外部网站的链接。我使用的代码是:

var ref = window.open('http://google.com','_self','location=yes');
ref.addEventListener('loadstart',function(event) 
    console.log('load started');
);
ref.addEventListener('loadstop',function(event)     
    console.log('load stopped');
);
ref.addEventListener('loaderror',function(event) 
    console.log('load error = ' + JSON.stringify(event));
);

在 iOS 上,一切都像我预期的那样运行。加载了 google 网站的新浏览器窗口打开。但我无法在 Android 中加载任何内容。当我单击按钮时,什么也没有发生。我已经在 window.open 之前和之后添加了控制台语句,所以我知道代码至少正在执行。

我的 config.xml 应该对白名单网站开放:

<access origin=".*"/>;

我在 Nexus 7 (android 4.2) 和 android 2.2 模拟器上进行了测试,结果相同。

有谁知道为什么 window.open 不能在 android 上正确触发?

【问题讨论】:

您的 config.xml 文件中是否列出了 InAppBrowser 插件?您在 AndroidManifest.xml 中有 Internet 权限吗? 两者都在里面。我刚刚使用了您创建新 phonegap 项目时创建的基本清单。 &lt;uses-permission android:name="android.permission.INTERNET" /&gt; 在我的清单中,&lt;plugin name="InAppBrowser" value="org.apache.cordova.InAppBrowser"/&gt; 在我的 config.xml 中 我刚刚在我的 Nexus 7 (4.2) 上尝试了相同的设置并且没有遇到问题...但是,我没有使用 jqm...也许这可能是个问题?如果您只是使用 vanilla javascript 启动该功能,它可以工作吗?您确实说过您收到了 console() 消息...我假设的日志中没有任何内容? 【参考方案1】:

看起来这是 2.6 在 Android 上加载插件的问题。我升级到 2.7,一切都开始工作了。

【讨论】:

感谢您。这确实是一个 phonegap 错误,浪费了我太多时间。【参考方案2】:

也许这是使用ChildBrowser plugin 的解决方案?这使您可以更好地控制操作本身,同时仍保持 iOS 和 Android 之间的平台兼容性。

在大多数情况下,我使用类似下面的 sn-p 来使用子浏览器来显示外部页面。

function openBrowser(url) 

    // determine if the childbrowser plugin is available
    var useChildBrowser = ('plugins' in window && window.plugins.childBrowser);

    if (useChildBrowser) 
        popup = window.plugins.childBrowser;
        popup.showWebPage(url,  showLocationBar: false, showAddress: false );
     else 
        popup = window.open(url, 'Share', "['width=600px', 'height=400px', 'resizable=0', 'fullscreen=yes']"); 
    

请注意,如果 ChildBrowser 插件不可用,这将回退到使用 window.open,因此您不会因此而破坏任何其他内容。也许值得一试?

【讨论】:

我实际上已经将 ChildBrowser 搞砸了几个小时,但遇到了基本相同的问题。那时我意识到 window.open 是 2.6 核心功能的一部分,所以我决定废弃 ChildBrowser。

以上是关于Phonegap window.open 在 Android 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

window.opener 的用法

Phonegap/Cordova InAppbrowser 文件下载问题

Phonegap:在默认浏览器中打开 URL

在 InAppBrowser 中使用代理服务器 - PhoneGap

Phonegap Build Inappbrowser 缩放

phonegap 应用程序在 ios 上加载网站非常慢