dojo 1.8集成了html5 postmessage

时间:2012-09-12 04:13:16

标签: html5 dojo

我试图通过dojo 1.8获得一些html5帖子消息,我创建了一个jsfiddle来尝试更好地解释它。需要注意的一点是按钮是在iframe中加载的。因此,基本上如果在iframe中发生单击,则父节点应该接收并对该消息进行操作。任何指针都会受到赞赏。

http://jsfiddle.net/AvPFv/

1 个答案:

答案 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>";
    }

});