我试图通过dojo 1.8获得一些html5帖子消息,我创建了一个jsfiddle来尝试更好地解释它。需要注意的一点是按钮是在iframe中加载的。因此,基本上如果在iframe中发生单击,则父节点应该接收并对该消息进行操作。任何指针都会受到赞赏。
答案 0 :(得分:1)
基本上,您应该在iframe窗口上收听message
,即iframe.contentWindow
。另请注意,您的iframe中没有dojo
。
我创建了一个jsFiddle以显示它是如何工作的:http://jsfiddle.net/phusick/H7Zh8/但是我担心将所有内容都放在一个文件中是非常麻烦的,即在父窗口的上下文中,因为它没有正确解释window
引用所指向的地方,并且它不模拟真实世界的使用情况。我建议你在localhost上尝试两套脚本,一套用于父窗口,另一套用于iframe。
require([
"dojo/dom",
"dojo/on",
"dojo/date/locale",
"dojo/domReady!"
], function(
dom,
on,
locale
) {
var buttonNode = dom.byId("postMessageButton");
var iframeNode = dom.byId("iframe");
var iframe = iframeNode.contentWindow;
var iframeButtonNode = iframe.document.getElementById("postMessageButton");
on(buttonNode, "click", function() {
iframe.postMessage("hello from parent", "*");
});
on(iframe, "message", function(event) {
var msgNode = iframe.document.getElementById("msg");
msgNode.innerHTML += formatMessage(event);
event.source.postMessage("echo from iframe", "*");
});
on(iframeButtonNode, "click", function() {
iframe.parent.postMessage("hello from iframe", "*");
})
on(window, "message", function(event) {
dom.byId("msg").innerHTML += formatMessage(event);
});
function formatMessage(event) {
var time = locale.format(new Date(event.timeStamp),{
selector: "time",
formatLength: "medium"
});
return time + ": " + event.data + "<br>";
}
});