我有一个包含两个网站的 Web 应用程序 - 一个在端口 8080 (Java) 上运行,另一个在端口 80 (IIS) 上运行。 Java 网页调用 IIS 网页,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");
那么我会得到一个关于
错误:“http://localhost”从“http://localhost:8080”获取属性 Window.addEventListener 的权限被拒绝
。
b) 在 Firefox 中,如果我没有打开警报,则不会显示任何错误消息,但看起来它首先显示 Focus_onuloadExitEvent
然后是 Focus_onfocusEvent
,所有在打开弹出窗口的过程中。关闭弹出窗口不会触发 Focus_onunloadExitEvent
。
如何确保代码在 Firefox 和 IE 中都能正常运行 - 即。我希望 onfocusEvent
在弹出窗口焦点时触发,而 onunloadEvent
在弹出窗口卸载时触发。
最佳答案
这是 same origin policy .您不能让主机 A 上的文档加载 JavaScript 访问或修改从主机 B 加载的文档中的内容。因为您的主机之一是 localhost:80
而另一个是 localhost:8080
,这些被浏览器认为是不同的主机。
在您的特定情况下,一种解决方案是将弹出页面与打开它的页面放在同一台服务器上,并在弹出页面内放置一个 iframe 指向另一台主机上的内容。这样,您的 JavaScript 就能够将事件监听器附加到弹出窗口本身。
关于javascript - Firefox AddEventListener 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1910043/