Android InAppBrowser _system 回调
Android InAppBrowser _system callbacks
我一直在 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”。这是有效的,因为 phone 可以使用 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'); });
}
为了 运行 在另一个文件上编写脚本,您需要先像这样加载该文件:-
var ref = window.open('http://www.libertymountain.com/','_system');
$(ref .document).load(function() {
alert('Hello');
// do other things
});
或+------
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'); });
}
我听说您实际上无法在外部系统浏览器中执行脚本或触发回调(当为 InAppBrowser window.open() 使用“_system”选项时)。从我的测试来看,这似乎是真的。另一方面,“_blank”当然会触发回调,因为它在应用程序中使用本机浏览器。
我一直在 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”。这是有效的,因为 phone 可以使用 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'); });
}
为了 运行 在另一个文件上编写脚本,您需要先像这样加载该文件:-
var ref = window.open('http://www.libertymountain.com/','_system');
$(ref .document).load(function() {
alert('Hello');
// do other things
});
或+------
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'); });
}
我听说您实际上无法在外部系统浏览器中执行脚本或触发回调(当为 InAppBrowser window.open() 使用“_system”选项时)。从我的测试来看,这似乎是真的。另一方面,“_blank”当然会触发回调,因为它在应用程序中使用本机浏览器。