使 postMessage() 和 addEventListener() 与 IE8 兼容
Making postMessage() and addEventListener() compatible with IE8
我正在做一个需要同时使用 postMessage()
和 addEventListener()
的项目,但我们希望应用程序与主要浏览器兼容。因为仍然有人(是的,他们存在,是的,他们应该被烧毁)使用 Internet Explorer 8,我们需要使以上两种方法兼容。
我编写了下面的代码,它通过使用 attachEvent()
而不是 this answer. However, postMessage()
is still not working and therefore I added in a timeout, as suggested on this website 中的建议来使 addEventListener()
兼容。这是行不通的,我真的很难使应用程序兼容。它不会抛出任何错误,我还可以看到我的应用程序已将消息发送到 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>
您缺少 "on"
window.attachEvent("onmessage", receiveMessage);
我正在做一个需要同时使用 postMessage()
和 addEventListener()
的项目,但我们希望应用程序与主要浏览器兼容。因为仍然有人(是的,他们存在,是的,他们应该被烧毁)使用 Internet Explorer 8,我们需要使以上两种方法兼容。
我编写了下面的代码,它通过使用 attachEvent()
而不是 this answer. However, postMessage()
is still not working and therefore I added in a timeout, as suggested on this website 中的建议来使 addEventListener()
兼容。这是行不通的,我真的很难使应用程序兼容。它不会抛出任何错误,我还可以看到我的应用程序已将消息发送到 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>
您缺少 "on"
window.attachEvent("onmessage", receiveMessage);