首页 > 解决方案 > webkit 未定义:InAppBrowser Cordova

问题描述

我正在 Cordova 应用程序中从 typescript 文件运行 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);"
      });
      }
  );

错误 错误

我尝试过但没有成功的解决方案

(window as any).webkit....

(窗口).webkit....

标签: androidcordovawebkitcordova-pluginsinappbrowser

解决方案


好的,一年后我在这里回答这个问题以及我是如何解决的。所以我有无限的运行间隔来使用 executeScript 检查本地和 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);

现在从本机方面,使用这个 eventlistner 像

inAppBrowser.on('message').subscribe((dataFromIAB) => {
      alert(dataFromIAB.data.sendToNative);
});

感谢@DaveAlden 提供此功能,一年前我做错了,哈哈。


推荐阅读