我正在从Cordova应用程序中的打字稿文件运行InAppBrowser实例。我在package.json中挂了最新的InAppBrowser插件。当我在此InAppBrowser的loadStop事件上添加侦听器时。它不执行说“未定义Webkit”的脚本。我找不到与之相关的答案。有谁知道如何解决这个问题?
代码段
switchHybridApp.on("loadstop").subscribe((event: InAppBrowserEvent) => {
console.log("Here I am 3");
console.log('loadstop has been fired'); // this fires
debugger;
// when this has been executed, `webkit` variable doesn't exist inside of the `inappbrowser`
// instance
switchHybridApp.executeScript({ code: "\
var message = 'this is the message';\
var messageObj = {my_message: message};\
var stringifiedMessageObj = JSON.stringify(messageObj);\
webkit.messageHandlers.cordova_iab.postMessage(stringifiedMessageObj);"
});
}
);
我尝试过的解决方案
(任意窗口).webkit ....
(window).webkit ....
答案 0 :(得分:0)
好吧,一年后我要在这里回答这个问题以及如何解决。所以我有无限的运行间隔来使用executeScript检查native和inappbrowser的localStorage,但这是一个非常糟糕的选择。现在,InAppBrowser已实现“ postMessage”。 现在它的通讯非常简单。
我所做的是,我在inAppBrowser中打开的Web应用程序在ts文件中运行。
(window as any).webkit.messageHandlers.cordova_iab.postMessage(sendToNative);
请注意,objToSend必须是JSON对象。传递简单的字符串不起作用。
您可以创建类似这样的对象-
const sendToNative= 'frontCameraOpen';
const sendToNative= {message: sendToNative};
const stringifiedMessageObj = JSON.stringify(sendToNative);
现在从本地开始,像使用该事件列表器
inAppBrowser.on('message').subscribe((dataFromIAB) => {
alert(dataFromIAB.data.sendToNative);
});
感谢@DaveAlden的此功能,我一年前做错了大声笑。