【问题标题】:Firefox AddEventListener issueFirefox AddEventListener 问题
【发布时间】:2014-09-12 05:10:17
【问题描述】:

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

Page 1 (IIS) > onClick of Button > Page 2 (Java/Tomcat) > User closes popup > Data transfer to Page 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 在弹出窗口卸载时触发。

【问题讨论】:

    标签: javascript firefox


    【解决方案1】:

    这是same origin policy。您不能让主机 A 上的文档加载 JavaScript 访问或修改从主机 B 加载的文档中的内容。由于您的一个主机是 localhost:80 而另一个是 localhost:8080,因此浏览器将这些主机视为不同的主机.

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

    【讨论】:

      猜你喜欢
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 2015-12-10
      • 2010-12-14
      • 1970-01-01
      相关资源
      最近更新 更多