执行从InAppBrowser中的executeScript调用的打字稿函数

时间:2018-12-19 12:30:14

标签: cordova ionic3 inappbrowser

我正在实现离子Cordova InAppBrowser功能,其中必须调用在InAppBrowser外部编写的函数“ loadstop”事件。 我想要的是在执行loadstop事件后立即调用callBack()函数。 我的伪代码在下面:

this.browser.on("loadstop").subscribe((event)=>{
this.browser.executeScript({code: if(document.getElementByID("ID").length > 1){function callBack();}})
});

callback(){
this.browser.hide();
}

感谢进阶!

1 个答案:

答案 0 :(得分:1)

您通过code注入的executeScript()在InappBrowser Web视图的范围内执行,而不是在Cordova应用程序Webview的范围内执行,因此您的Cordova应用程序中的功能不可见。 还要注意,传递给code的{​​{1}}参数必须是字符串化的Javascript,因为它将通过本机桥传递给InappBrowser Webview。

因此,有两种方法可以实现回调:

首先,由于可以在InappBrowser Webview的上下文中同步评估是否调用回调的条件,因此您可以使用executeScript()的当前npm版本同步返回DOM查询的结果,例如: / p>

cordova-plugin-inappbrowser

但是,如果需要异步返回条件的结果,则上述方法将不起作用。 相反,您可以使用postMessage API实现,该实现已由this PR添加到Android和iOS平台的callBack(){ console.log("Typescript callback has been called"); this.browser.hide(); } this.browser.on("loadstop").subscribe((event)=>{ this.browser.executeScript( { code: 'document.getElementByID("ID").length > 1;' }, function(values){ var result = values[0]; if(result){ callBack(); } } ); }); 中。 它尚未发布到npm的版本中,因此您需要直接从Github存储库中安装插件的master分支:

cordova-plugin-inappbrowser

然后您将像这样使用它:

cordova plugin add https://github.com/apache/cordova-plugin-inappbrowser