跨浏览器窗口事件?

时间:2012-07-11 08:42:55

标签: javascript internet-explorer javascript-events

是否可以触发由单独的浏览器窗口拾取的事件?用javascript或许。

即。如果我的网站打开另一个窗口显示摘要产品信息,是否可以在主窗口中选择其他产品时通知该窗口更新?

需要在IE中使用,但无需在Chrome或其他浏览器上运行。

3 个答案:

答案 0 :(得分:4)

使用这样的代码:

父窗口

var func = function() {...}
child = window.open(...)

子窗口

window.opener.func(); // Call function in parent window

您也可以从父窗口调用子窗口中的函数,但是有一个问题:您必须等到子窗口完成加载; window.open()是异步的。

更多详情:Accessing parent window from child window or vice versa using JavaScript

答案 1 :(得分:3)

有一个情侣选项。

  1. Cross-Document-Messaging允许您在窗口之间传递事件。为此,您需要拥有目标窗口的句柄,如果目标是<iframe>(例如通过window.frameswindow.parent,您实际上只能获取目标窗口的句柄。 iframe的POV)或目标是当前窗口通过弹出窗口的POV中的window.open()window.opener打开的窗口。
  2. Shared Workers可以像Cross-Document-Messaging一样连接其他无关联的窗口。但共享工作者是only available in Chrome and Safari
  3. Server-Sent Events可以使用服务器代理您无关联的窗口之间的通信。这需要到服务器的往返(因此不完全基于客户端)并且是not available in Internet Explorer
  4. Web Sockets也是一种选择。他们也受到服务器往返的影响而且not available in Internet Explorer。有socket.io,它将此功能填充到旧的Internet Explorer中 - 因此可能是一个可行的解决方案。
  5. 一个hacky解决方案是abusing LocalStorage。它将在现代浏览器和IE8中工作。
  6. jQuery BrowserEvent是我玩回来的时候。它滥用window.event和浏览器&#39;本地存储功能,以模拟浏览器之间的传递事件。但是,这并不是您想要在生产环境中使用的。

  7. 德国人可能想看看Kommunikations-APIs in HTML5 - Welche wann nutzen?

答案 2 :(得分:0)

是的,如果可能会在父窗口中使用window.open方法打开包含产品信息的窗口。

通过这种方式,您可以促使这两者之间的沟通(严格来说,没有事件),但可以使用一些额外的代码。