Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript iFrame内的cordova回调_Javascript_Android_Cordova_Iframe - Fatal编程技术网

Javascript iFrame内的cordova回调

Javascript iFrame内的cordova回调,javascript,android,cordova,iframe,Javascript,Android,Cordova,Iframe,我使用cordova和nanohttpd创建了一些Android web应用程序。主页是使用本地主机url从nanohttp加载的。主页包含一个iFrame,它从与主页相同的域(localhost)加载一些页面 下面的代码是从iFrame调用的: document.addEventListener("deviceready", function(){ cordova.exec(function(response) { self.doSomething

我使用cordova和nanohttpd创建了一些Android web应用程序。主页是使用本地主机url从nanohttp加载的。主页包含一个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中启动回调函数?如果可能,怎么做?

是的,很有可能

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

请参阅此链接:

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

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

  • 使用postMessage在父窗口和子窗口/iframe之间创建通信。父母和孩子互相倾听
  • 从child/iframe向parent发送/触发消息以调用cordova插件
  • 从父窗口调用cordova插件
  • 父窗口中创建要从cordova代码/端调用的全局函数(android中的Java)
  • 找出cordova中的java文件(调用回调函数并解析返回的结果)线索:callbackContext.success(参数)。从这里,我们需要调用在父窗口中创建的全局函数
  • 从cordova的java文件调用在父窗口中创建的全局函数。以下是从java代码调用js代码的片段:
  • 您的web视图.loadUrl(“javascript:函数名参数结果来自于科多瓦)”

  • 使用postMessage将在父级中获取的消息发送回iframe/子级

  • 这应该行得通。如果您发现任何问题,请告诉我。

    谢谢!让我试试这个。更新:这在大多数情况下都有效。但是有一种可能性,有时是四分之一,Cordova回调没有执行。对,它有时仍然调用错误的接收方上下文。我已经更新了答案。关键是我们需要在cordova插件端做一些修改,在得到结果后直接调用javascript函数。我已经实现了它,它应该像一个符咒一样工作。啊,是的!将结果直接注入javascript非常有效。非常感谢!