代码之家  ›  专栏  ›  技术社区  ›  Kevin

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

  •  0
  • Kevin  · 技术社区  · 9 年前

    我正在做一个项目,我们需要同时使用 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 回复  |  直到 7 年前
        1
  •  1
  •   epascarello    9 年前

    您缺少“on”

    window.attachEvent("onmessage", receiveMessage);