Android InAppBrowser _system回调

时间:2015-07-15 03:23:54

标签: javascript android cordova callback inappbrowser

我一直在Cordova开发Android / IOS / Windows 8的移动应用程序,需要将一些字符串传递给网页。不幸的是,网页不支持TLS 1.0协议,这意味着较旧的Android版本(和IOS版本)无法在本机浏览器中打开页面。

这意味着当设置为' _blank'时,window.open调用将不会在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'); });
}

2 个答案:

答案 0 :(得分:1)

我听说您无法在外部系统浏览器中实际执行脚本或触发回调(当使用InAppBrowser window.open()的'_system'选项时)。从我的测试来看,这似乎是真的。另一方面,'_ blank'当然会触发回调,因为它正在使用应用程序中的本机浏览器。

答案 1 :(得分:0)

要在另一个文件上运行脚本,您需要首先加载该文件: -

var ref = window.open('http://www.libertymountain.com/','_system');
$(ref .document).load(function() {
    alert('Hello');
    // do other things
});

OR + -------

document.addEventListener("deviceready", onDeviceReady, false);

// device APIs are available
//
function onDeviceReady() {
     var ref = window.open('http://www.libertymountain.com/','_system');
     ref.addEventListener('loadstart', function(event) { alert('Hello'); });
}