iFrame 中的 cordova 回调

cordova callback inside iFrame

本文关键字:回调 cordova 中的 iFrame      更新时间:2023-09-26

我使用cordova和nanohttpd创建了一些Android Web应用程序。主页是从带有本地主机网址的nanohttp加载的。主页包含一个iFrame,它从与主页(本地主机(相同的域加载一些页面。

下面的代码是从 iFrame 调用的:

document.addEventListener("deviceready", function(){
    cordova.exec(function(response) {           
        self.doSomething(response);
    },function(error) {
        alert(JSON.stringify(error));
    },"thePlugin","showMap", param);}, false);

现在这是我的问题:来自iframe的cordova.exec能够调用Java插件并显示地图。但是它找不到javascript回调函数。是否可以在 iFrame 中触发回调函数?如果可能,如何?

是的,这是很有可能的。

您的问题是由主窗口和 iframe 窗口之间的冲突引起的。

请参考此链接:https://github.com/phonegap/phonegap/wiki/iFrame-Usage

我已经使用科尔多瓦插件联系安卓成功实现了这一点。

为此,您需要执行以下操作:

  1. 使用 postMessage 创建父窗口和子窗口/iframe 之间的通信。父母和孩子互相倾听。
  2. 发送/触发从子/iframe 到父级的消息以调用 cordova 插件。
  3. 父窗口调用 cordova 插件。
  4. 父窗口中创建全局函数,以便从 cordova 代码/端调用(android 中的 Java(。
  5. 找出科尔多瓦中的java文件(调用回调函数并解析结果(。线索:callbackContext.success(parameter(;.从这里开始,我们需要调用在父窗口中创建的全局函数
  6. 从 cordova 的 java 文件中调用在父窗口中创建的全局函数。以下是从java代码调用js代码的片段:

your_web_view.loadUrl("javascript:function_name(parameter_result_from_cordova("(;

  1. 使用 postMessage 将父级中的消息发回 iframe/子级。

这应该有效。如果您发现任何问题,请告诉我。