Nin*_*ine 5 javascript android callback cordova inappbrowser
我一直在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')
Run Code Online (Sandbox Code Playgroud)
我的解决方案是将其更改为“ _system”而不是“ _blank”。之所以可行,是因为手机可以使用chrome或safari浏览器而不是本机浏览器。但是,当我这样做时,所有回调都将停止工作。它只是打开页面,而我无法在其上运行脚本。
例如,下面的代码永远不会执行回调。它只是打开网页:
var ref = window.open('https://www.libertymountain.com/login.aspx','_system');
ref.addEventListener('loadstart', function() { alert("Hello"); });
Run Code Online (Sandbox Code Playgroud)
我是否缺少某些东西,或者有适当的方法来做到这一点?
编辑:为了明确起见,这是我的代码,永远不会触发回调:
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'); });
}
Run Code Online (Sandbox Code Playgroud)
如果将其更改为此,事件将触发。但是我需要使用“ _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'); });
}
Run Code Online (Sandbox Code Playgroud)
我听说您实际上无法在外部系统浏览器中执行脚本或触发回调(当使用 InAppBrowser window.open() 的“_system”选项时)。从我的测试来看,这似乎是真的。另一方面,“_blank”当然会触发回调,因为它使用应用程序内的本机浏览器。