使postMessage()和addEventListener()与IE8兼容

时间:2015-01-29 14:43:00

标签: javascript internet-explorer-8 addeventlistener postmessage

我正在开展一个项目,我们需要同时使用postMessage()addEventListener(),但我们希望让应用程序与主流浏览器兼容。因为仍有人(是的,他们存在,是的,他们应该被烧毁)使用Internet Explorer 8,我们需要使上述两种方法兼容。

我已经编写了下面的代码,它使用addEventListener()代替attachEvent(),而不是this answer中的建议。但是,postMessage()仍然无效,因此我按照this website的建议在超时时添加了。这不起作用,我真的很难使应用程序兼容。它不会抛出任何错误,我也可以看到我的应用程序已向iframe源发送消息,但是消息永远不会被处理。

<script type="text/javascript">
    function ready()
    {
        window.setTimeout(function() {
            document.getElementById("editor").contentWindow.postMessage("A", "domain here");
        }, 0);
    }

    function receiveMessage(event)
    {
        if (event.origin !== "domain here")
            return;
    }

    window.setTimeout(function() {
        if (window.addEventListener) {
            window.addEventListener("message", receiveMessage, false);
        }
        else {
            window.attachEvent("message", receiveMessage);
        }
    }, 0);
</script>

我的第二个页面上有一个类似的脚本(正在加载到iframe中),它接收一条消息并发回消息。所有主流浏览器都发送和接收这两条消息,因此问题是:如何使上述脚本与Internet Explorer 8兼容?

再一次:我同意我们不应该关心使用Internet Explorer 8的人,而应该将它们烧掉仍然使用它:但是这意味着我们会烧掉我们的客户,这是我们做不到的事情。所以是的,我真的需要让它兼容。

如果您想知道:getElementById("editor")捕获iframe定义如下:

<iframe src="frameListener.html" class="editor" id="editor" onload="ready()"></iframe>

1 个答案:

答案 0 :(得分:1)

你错过了&#34; on&#34;

window.attachEvent("onmessage", receiveMessage);