在 inAppBrowser 内部导航后,executeScript 不起作用。

3

我正在尝试将代码注入到通过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]”不再被记录。已安装的插件包括:InAppBrowser、Console和BarcodeScanner。InAppBrowser和BarcodeScanner都是直接从它们的Github存储库安装的。Cordova版本为3.3(也尝试过3.4,结果相同),Xcode版本为5.0.2,iOS目标版本为7。我始终使用cordova prepare,然后直接在iPad Air上使用Xdebug运行。我还尝试过cordova build ios。我还注意到脚本稍后会在导航到另一个页面时执行。在初始页面上滚动时也不会执行。有人知道这里发生了什么吗?这种情况其他人是否也有遇到?非常感谢您的帮助!我已经研究并从零开始创建了全新的cordova项目,并基本上在这个奇怪的情况下度过了整天...

注意:访问来源目前设置为*,因此不应适用任何白名单问题。 - user3414618
1个回答

2

看起来问题出在循环上...必须在loadstart时清除它。

所以以下解决了这个问题:

self.inappbrowser.addEventListener('loadstart', function(event) {

    trace('loading page - ' + JSON.stringify(event));

    clearInterval(loop);
});

希望这也能帮助其他人!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接