Firefox AddEventListener问题

时间:2009-12-15 20:09:25

标签: javascript firefox

我有一个由两个网站组成的Web应用程序 - 一个在端口8080(Java)上运行,另一个在端口80(IIS)上运行。 Java网页调用IIS网页,偶尔会回调到Java网页以获取其他信息。处理数据通信/交换的JavaScript 可在IE中使用,但不适用于Firefox。

第1页(IIS)> onClick of Button>第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中,如果我没有启用警报,则表示没有显示错误消息,但它看起来先Focus_onuloadExitEvent然后Focus_onfocusEvent,所有这些都在打开弹出。关闭弹出窗口不会触发Focus_onunloadExitEvent

如何确保代码在Firefox和IE中正常运行 - 即。我希望onfocusEvent触发弹出窗口焦点,onunloadEvent触发弹出窗口卸载。

1 个答案:

答案 0 :(得分:5)

这是same origin policy。您无法通过主机A上的文档加载JavaScript来访问或修改从主机B加载的文档中的内容。由于您的一个主机是localhost:80而另一个是localhost:8080,这些被认为是不同的浏览器托管主机。

在您的特定情况下,解决方案是将弹出页面放在与打开它的页面相同的服务器上,并将弹出窗口中的iframe指向另一个主机上的内容。这样,您的JavaScript就能将事件监听器附加到弹出窗口。