未定义webkit:InAppBrowser Cordova

时间:2019-05-14 07:16:29

标签: android cordova webkit cordova-plugins inappbrowser

我正在从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);"
      });
      }
  );

错误 Error

我尝试过的解决方案

(任意窗口).webkit ....

(window).webkit ....

1 个答案:

答案 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的此功能,我一年前做错了大声笑。