javascript - iFrame 中的 cordova 回调

标签 javascript android cordova iframe

我使用 cordova 和 nanohttpd 创建了一些 Android 网络应用程序。主页是从带有本地主机 url 的 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 插件并显示 map 。但它无法找到 javascript 回调函数。是否可以在 iFrame 中触发回调函数?如果可能,怎么做?

最佳答案

是的,很有可能。

你的问题是主窗口和iframe窗口冲突造成的。

请引用此链接: https://github.com/phonegap/phonegap/wiki/iFrame-Usage

我已经使用 cordova 插件联系 android 成功实现了这一点。

要使其成为可能,您需要执行以下操作:

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

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

  1. 使用 postMessage 将在 parent 中获取的消息发送回 iframe/child。

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

关于javascript - iFrame 中的 cordova 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27303271/

相关文章:

javascript - 在日期时间选择器组件上按 Enter 出现问题

javascript - 当您链接脚本时,它会自动运行吗?

android - Honeycomb 以下的 Android 不支持 Bytebuffer array() 方法

android - 在 Android 应用程序项目中包含其他 Eclipse 项目

javascript - android 上phonegap 项目中的Ajax 请求

javascript - 如何在 jquery 3.1.0 中使用 "Swipe Menu Jquery Mobile"?

ArrowDown 的 Javascript 事件监听器 - 停止页面滚动

javascript - 使用 jQuery 导航函数数组

Android - 当从具有不同附加功能的小部件启动相同的 Activity 时,如何防止从主页按钮返回后显示相同的实例?

javascript - Phonegap 3.3.0 iOS 文件系统插件未触发完成、进度或错误