如何通过离子应用内浏览器插件使用postMessage?

时间:2019-11-13 22:08:16

标签: cordova ionic-framework iframe inappbrowser postmessage

由于Cordova in-app-browser模块的版本3.1.0-dev,看来我们可以通过以下方式使用postMessage API:

webkit.messageHandlers.cordova_iab.postMessage(stringifiedMessageObj);

但是,经过漫长的搜索,我没有成功使它起作用。它总是默默地失败。此外,缺少webkit对象...如this问题中所述,我提交了有效的JSON字符串。请在下面找到我的package.json文件的摘录:

{
  "dependencies": {
     "@angular/core": "~8.1.2",
     "@ionic-native/core": "^5.16.0",
     "@ionic-native/in-app-browser": "^5.16.0",
     "cordova-plugin-inappbrowser": "git+https://github.com/apache/cordova-plugin-inappbrowser.git"
   }
}

我用npm list –depth=0检查了cordova应用程序内浏览器版本,并安装了3.1.1-dev。 你有主意吗?如果您需要更多信息,请不要犹豫。 :-)

编辑:我想将数据从iframe发送到我的“主线程”。为此,我使用了executeScript方法,该方法在iframe中注入了脚本。但是可悲的是,我没有Webkit对象。

this.ref = this.iab.create("https://google.com", "_blank", "EnableViewPortScale=yes,location=no,hidden=false");
this.ref.on('loadstop').subscribe(event => {
  this.ref.executeScript({
                code: 'webkit.messageHandlers.cordova_iab.postMessage(JSON.stringify({foo:"bar"});'
            });
});

1 个答案:

答案 0 :(得分:1)

在测试我的应用程序时,我使用了命令ionic serve --devapp,并在Android手机上使用了Ionic DevApp应用程序。因此,它似乎不是一个真正的Android本机应用程序。 我引用了cordova inappbrowser git repo

  

浏览器怪癖   不会触发loadstart,loaderror,消息事件。

我在笔记本电脑上安装了Android模拟器,并成功将postMessage从我的“ iframe”传输到“主线程”。