我试图让一些 html5 发布消息与 dojo 1.8 一起使用,我创建了一个 jsfiddle 来尝试更好地解释它。需要注意的一件事是按钮正在 iframe 中加载。所以基本上,如果在 iframe 中发生点击,那么父节点应该接收并处理该消息。任何指针将不胜感激。
问问题
810 次
1 回答
1
基本上,您应该message
在 iframe 窗口上收听,即iframe.contentWindow
. 另外,请注意dojo
您的 iframe 中没有。
我创建了一个 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>";
}
});
于 2012-09-12T11:47:47.093 回答