1

在我的应用程序中,我使用 Cordova 的 InAppBrowser 打开外部页面。我附加了一个轮询事件来查找 localStorage 条目。当条目被“看到”时,InAppBrowser 应该关闭,但这并没有发生。

顺便说一下,这一切都在英特尔 XDK 中。

发生的事情(参考下面的代码)是 Game1.html(外部页面)确实加载并出现了。当我单击触发“提交”功能的按钮时,我确实看到了“完成!” 来自 Game.html 页面的警报,但我没有看到来自事件侦听器的“捕获”警报。

更新:我注意到当远程页面被加载并显示时,左上角有一个“后退”图标。我没想到 Cordova InAppBrowser 会出现这种情况。但是,在 device.showRemoteSiteExt (intel bridge api) 的文档中,它描述了这个图标。是否有可能 window.show 被 device.showRemoteSiteExt 覆盖?

我想使用此方法的主要原因是允许 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 中的一个漏洞吗?

提前致谢。

4

1 回答 1

1

您的代码使用 Intel XDK App Preview 在 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>
于 2014-04-19T04:56:12.173 回答