火狐浏览器AddEventListener问题

3
我有一个网络应用程序,由两个网站组成 - 一个在8080端口上运行(Java),另一个在80端口上运行(IIS)。 Java网页调用IIS网页,有时会回调Java网页以获取额外的信息。处理通信/数据交换的JavaScript在IE中可用,但在Firefox中不行。
页面1(IIS)>点击按钮>页面2(Java/Tomcat)>用户关闭弹出窗口>数据传输到页面1 JavaScript:
if(window.attachEvent){//IE exclusive method for binding an event
    alert("AttachEvent");
    window.attachEvent("onfocus", Focus_onfocusEvent); 
    window.objExitPopupWindow.attachEvent("onunload", Focus_onunloadExitEvent);
} else if(window.addEventListener){//DOM method for binding an event. W3C standard          
    try{
        alert("Event Listener");
        window.addEventListener("focus", Focus_onfocusEvent, true);
        window.objExitPopupWindow.addEventListener("unload", Focus_onunloadExitEvent, true);
    } catch(err) {
            alert(err);
    }   
}   

我遇到的问题是:
a)在Firefox中,如果我启用了alert(“Event Listener”);,那么我会收到一个错误消息,内容是:Error: Permission denied for "http://localhost" to get property Window.addEventListener from "http://localhost:8080"
b)在Firefox中,如果我没有启用alert,那么就不会显示任何错误消息,但是看起来它首先执行Focus_onuloadExitEvent,然后执行Focus_onfocusEvent,这都是在打开弹出窗口的过程中进行的。关闭弹出窗口不会触发Focus_onunloadExitEvent
如何确保代码在Firefox和IE中都能正常工作 - 即我希望onfocusEvent在弹出窗口获得焦点时触发,onunloadEvent在弹出窗口卸载时触发。
1个回答

5
这是同源策略。在主机A加载的文档无法访问或修改从主机B加载的文档中的内容。由于您的主机之一是localhost:80,而另一个是localhost:8080,因此浏览器认为它们是不同的主机。
在您的情况下,解决方案是将弹出页面放在与打开它的页面相同的服务器上,并在弹出窗口内放置指向其他主机上内容的iframe。这样,您的JavaScript就能够将事件侦听器附加到弹出窗口本身。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接