在我的应用程序中,我使用Cordova的InAppBrowser打开外部页面。我附加一个轮询事件来查找localStorage条目。当“看到”条目时,InAppBrowser应该关闭但是没有发生。
顺便说一下,这一切都在英特尔XDK中。
发生了什么(参考下面的代码)是Game1.html(外部页面)确实加载并出现。当我点击激活“提交”功能的按钮时,我看到“完成!”来自Game.html页面的警报,但我没有看到来自事件监听器的“Caught”警报。
更新:我注意到当加载远程页面并显示左上角有一个“后退”图标时。我没想到Cordova InAppBrowser。但是,在device.showRemoteSiteExt(intel bridge api)的文档中,它描述了这个图标。是否有可能使用device.showRemoteSiteExt覆盖window.show?
我想使用此方法的主要原因是允许Game1.html生成存储到localCache的数据。然后轮询过程可以获取该数据并将其转发给服务器。
index.html中的函数:
function showGamesPage() {
var win = window.open("http://localhost:53841/Game1.html", "_blank", "EnableViewPortScale=yes");
win.addEventListener("loadstop", function() {
win.executeScript({ code: "localStorage.setItem('name', '' );" });
var loop = setInterval(function() {
win.executeScript({ code: "localStorage.getItem( 'name' );"},
function(values) {
var name = values[0];
if (name) {
clearInterval(loop);
alert("Caught!");
win.close();
}
}
);
});
});
}
这是我点击按钮时在Game1.html中触发的函数:
function submit() {
localStorage.setItem("name", "john");
alert("Done!");
}
有人知道为什么会这样吗?这只是XDK的一个漏洞吗?
提前致谢。
答案 0 :(得分:1)
您的代码在使用英特尔XDK应用预览的iPhone上完美运行,您是否已将<script src="cordova.js"></script>
添加到index.html
。
但是在XDK模拟器中它不起作用,localStorage.setItem()似乎不在模拟的inappbrowser中运行。
但iPhone上的代码相同,这里是代码:
<!DOCTYPE html>
<html>
<head>
<title>App</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="cordova.js"></script>
<script>
function showGamesPage() {
var win = window.open("https://c9.io/.../test.html", "_blank", "EnableViewPortScale=yes");
win.addEventListener("loadstop", function() {
win.executeScript({ code: "localStorage.setItem('name', '' );" });
var loop = setInterval(function() {
win.executeScript({ code: "localStorage.getItem( 'name' );"},
function(values) {
var name = values[0];
if (name) {
clearInterval(loop);
alert("Caught!");
win.close();
}
}
);
});
});
}
</script>
<style>
body{background-color: white}
</style>
</head>
<body>
<h1 onclick="showGamesPage()">Open</h1>
</body>
</html>