我正在一个需要同时使用postMessage()addEventListener()的项目中,但是我们希望使该应用程序与主要的浏览器兼容。因为仍有人使用Internet Explorer 8(是的,确实存在,应该将其刻录),所以我们需要使上述两种方法兼容。

我已经编写了下面的代码,该代码通过使用addEventListener()代替this answer中的建议使attachEvent()兼容。但是,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>

最佳答案

您错过了“上”

window.attachEvent("onmessage", receiveMessage);

关于javascript - 使postMessage()和addEventListener()与IE8兼容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28217437/

10-15 03:14