PhoneGap 中的 postMessage 不起作用 - iframe 到父消息传递

Posted

技术标签:

【中文标题】PhoneGap 中的 postMessage 不起作用 - iframe 到父消息传递【英文标题】:postMessage in PhoneGap not working - iframe to parent messaging 【发布时间】:2014-08-28 16:55:04 【问题描述】:

我已经构建了一个 PhoneGap 应用程序,它使用与应用程序捆绑在一起的 iframe,我正在尝试将 e 消息从 iframe 传递给父级,当我运行时它似乎不起作用实际 iPad 上的应用程序;但是,当我在同一设备上的浏览器中运行该应用程序时,它工作正常。

这是我在 iframe 中用于发送消息的代码,请注意我使用 HammerJS 来捕获一些事件:

var domain = 'http://' + document.domain;

$('body').hammer().on("swipe", "", function(event) 
    var message = event.gesture.direction;
    parent.postMessage(message,domain); //send the message and target URI
);

以及我用来获取消息的代码:

window.addEventListener('message',function(event) 
    alert(event.data);
,false);

【问题讨论】:

【参考方案1】:

答案是使用“file://”作为域名,所以代码如下所示:

var domain = 'file://';

$('body').hammer().on("swipe", "", function(event) 
    var message = event.gesture.direction;
    parent.postMessage(message,domain); //send the message and target URI
);

【讨论】:

不适合我,这就是我从页面调用的方式 dziban.co.in/test/…);" class="ui-btn ui-corner-all">打开窗口,收到与您相同的信息,并在 postMessage 中尝试了 file:// 和 dziban.co.in/test/postmsg.php,但没有运气。你能解释一下你是如何从html打开iframe的吗? 这不是从 html 打开 iframe,而是将数据从 iframe 传递到父网站,您可以在此处阅读更多信息:developer.mozilla.org/en-US/docs/Web/API/Window/postMessage。至于您要做什么,您无法从 javascript 打开 iframe,但您可以打开一个新窗口,您可以在此处阅读更多信息:w3schools.com/jsref/met_win_open.asp @JayaVishwakarma 请问您是如何解决这个问题的?我们正在使用parent.postMessage(message, '*');,它可以在 android 上运行,但我们无法让它在 ios 上运行 @jablesauce 您是否将 iframe 域列入白名单?请参阅github.com/phonegap/phonegap/wiki/iFrame-Usage -> IOS:“要将域列入白名单,请将其添加到 Cordova.plist 文件中的 ExternalHosts 数组中。” @jablesauce 你找到解决办法了吗?【参考方案2】:

尝试使用

var domain = '*';

一般应该是跨域问题,see more here

【讨论】:

【参考方案3】:

你需要使用:

parent.postMessage(message,"*");

因为 phonegap/cordova 页面在“file://”和https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage提供服务

"...在文件的页面上发布消息:URL 当前要求 targetOrigin 参数为“*”。file:// 不能用作安全限制;将来可能会修改此限制。 "

【讨论】:

以上是关于PhoneGap 中的 postMessage 不起作用 - iframe 到父消息传递的主要内容,如果未能解决你的问题,请参考以下文章

javascript中的postMessage

Internet Explorer 11 中的 window.postMessage 是不是有最大长度限制?

sendmessage和postmessage的区别

使用HTML5中postMessage实现Ajax中的POST跨域问题

MFC中的SendMessage和PostMessage

MFC中的SendMessage和PostMessage