无法将消息从 inappbrowser 发布到 Cordova 应用程序

Cannot postMessage from inappbrowser to Cordova application

我正在使用此模块 (https://github.com/apache/cordova-plugin-inappbrowser) 来打开我的 Cordova 应用程序中的外部链接。但是,postMessage 文档中的示例不起作用。

我需要能够让 inappbrowser 实例与父实例(opener)通信的能力。鉴于 inappbrowser 没有 opener 对象,我查看了 repo 的文档和测试,但我无法重现 postMessage API 以在 inappbrowser 实例和主 Cordova 应用程序(父)。

这是一个简单的例子,取自这个 repo 中的 documentation/test:

const ref = cordova.InAppBrowser.open('http://www.google.com', '_blank');

ref.addEventListener('loadstop', () => {
  console.log('loadstop has been fired'); // this fires

  // when this has been executed, `webkit` variable doesn't exist inside of the `inappbrowser`
  // instance
  ref.executeScript({
    code: `(() => {
      var message = "TESTING!!!";
      webkit.messageHandlers.cordova_iab.postMessage(JSON.stringify(message));
    })()`
  });
});

// this is never fired
ref.addEventListener('message', (...args) => {
  console.log('MESSAGE RECEIVED FROM IN_APP_BROWSER', ...args);
});

文档指向一个尚未发布的版本。我指出了这个包的 3.1.0-dev 版本,它的实现就像一个魅力。

是的,InAppBrowser 尚未实现 postMessage。在这种情况下,唯一的解决方案是使用 iframe 从您的外部网页接收 postMessage。 This has been discussed earlier 也在这个网站上。