为什么轮询不使用英特尔App Framework和Cordova的InAppBrowser?

时间:2014-04-10 19:38:48

标签: cordova inappbrowser intel-xdk appframework

在我的应用程序中,我使用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的一个漏洞吗?

提前致谢。

1 个答案:

答案 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>