在iFrame里面的cordova回调

时间:2014-12-04 20:20:19

标签: javascript android cordova iframe

我使用cordova和nanohttpd创建了一些Android Web应用程序。主页面从nanohttp加载localhost url。主页面包含一个iFrame,它从主页面(localhost)加载来自同一域的一些页面。

以下代码是从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中触发回调函数?如果可能,怎么样?

1 个答案:

答案 0 :(得分:3)

是的,很有可能。

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

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

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

为了实现这一目标,您需要执行以下操作:

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

    <强> your_web_view .loadUrl(&#34;的javascript:的函数名(适用的 parameter_result_from_cordova )&#34);

    1. 使用postMessage将父母获取的邮件发送回iframe / child。
    2. 这应该有效。如果您发现任何问题,请告诉我。