代码之家  ›  专栏  ›  技术社区  ›  user3414618

在AppBrowser中导航后executeScript无法工作

  •  3
  • user3414618  · 技术社区  · 12 年前

    我正在尝试将代码注入到通过InAppBrowser打开的网站中:

    var inappbrowser = window.open('http://example.com', '_blank', 'location=no,toolbar=no');
    

    为此,我使用了(不完全在这个结构中,但效果相同):

    var loop;
    inappbrowser.addEventListener('loadstop', function(event) {
        console.log('page finished loading - ' + JSON.stringify(event));
        clearInterval(loop);
        loop = setInterval(function() {
            console.log('checking for request');
            inappbrowser.executeScript({
                code: '1+2'
            }, function(result) {
                console.log('received: ' + result);
            });
        }, 500);
    });
    

    它可以很好地处理初始页面,但一旦我从InAppBrowser中导航到另一个页面,就不会执行任何脚本。事件有效,循环有效,但 'received: [3]' 不再被记录。

    当前安装的插件有:

    • InApp浏览器
    • 安慰
    • 条形码扫描仪

    InAppBrowser和BarcodeScanner都是直接从Github存储库安装的。

    • Cordova版本:3.3(也尝试了3.4,结果相同)
    • X代码:5.0.2
    • iOS目标版本:7

    我总是使用 cordova prepare 然后直接在iPad Air上使用Xdebug运行。我也尝试过 cordova build ios .

    我还注意到脚本稍后会执行 虽然 导航到另一页。 它也可以 在初始页面上滚动时运行。

    有人知道这里发生了什么吗?此外,这是否发生在其他人身上?

    提前非常感谢!我研究过,从全新的科多瓦项目开始,基本上花了一整天的时间在这个奇怪的事件上。。。

    1 回复  |  直到 12 年前
        1
  •  2
  •   user3414618    12 年前

    看来问题出在循环上。。。它必须在装载开始时清除。

    因此,以下步骤解决了问题:

    self.inappbrowser.addEventListener('loadstart', function(event) {
    
        trace('loading page - ' + JSON.stringify(event));
    
        clearInterval(loop);
    });
    

    希望这对其他人也有帮助!