【发布时间】:2015-07-15 03:23:53
【问题描述】:
我一直在 Cordova 中为 Android/IOS/Windows 8 开发一个移动应用程序,该应用程序需要向网页传递一些字符串。对我来说不幸的是,该网页不支持 TLS 1.0 协议,这意味着较旧的 Android 版本(和 IOS 版本)无法在本机浏览器中打开该页面。
这意味着 window.open 调用,当设置为 '_blank' 时,不会在 16 API 之前的任何 Android 版本上加载页面,并且只有 19 API 及更高版本才真正保证:
window.open('https://www.libertymountain.com/login.aspx','_blank')
我的解决方案是将其更改为“_system”而不是“_blank”。这是可行的,因为手机可以使用 chrome 或 safari 浏览器而不是原生浏览器。但是,当我这样做时,所有回调都停止工作。它只是打开页面,我无法在其上运行脚本。
例如,下面的代码永远不会执行回调。它只是打开网页:
var ref = window.open('https://www.libertymountain.com/login.aspx','_system');
ref.addEventListener('loadstart', function() { alert("Hello"); });
是我遗漏了什么,还是有合适的方法来做到这一点?
编辑:为了清楚起见,这是我永远不会触发回调的代码:
document.addEventListener("deviceready", init, false);
function init() {
window.open = cordova.InAppBrowser.open;
var ref = window.open('https://www.libertymountain.com/login.aspx', '_system');
// This event never triggers, nor does any other event, even though the
// webpage is opened in Chrome
websiteReference.addEventListener('loadstart', function(event) { console.log('Hello'); });
}
如果我把它改成这个,事件就会触发。但我需要使用 '_system' 来完成,否则旧的 Android 和 IOS 设备将无法执行此操作。
document.addEventListener("deviceready", init, false);
function init() {
window.open = cordova.InAppBrowser.open;
// Change '_system' to '_blank'
var ref = window.open('https://www.libertymountain.com/login.aspx', '_blank');
// This event never triggers, nor does any other event, even though the
// webpage is opened in Chrome
websiteReference.addEventListener('loadstart', function(event) { console.log('Hello'); });
}
【问题讨论】:
-
@jcesarmobile 你可以吗?如何?侦听器不会为外部浏览器触发。
-
抱歉,是“您无法将侦听器添加到外部浏览器”
-
@jcesarmobile 那么有没有办法在手机的外部浏览器上运行脚本呢?
-
不,不可能
-
@jcesarmobile 好的,这就是我需要听到的。我很惊讶这很难找到。文档没有说明外部浏览器无法触发回调或在其上执行脚本。
标签: javascript android cordova callback inappbrowser