2

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

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

需要在 IE 中工作,但不需要在 Chrome 或其他浏览器上工作。

4

3 回答 3

4

使用这样的代码:

父窗口

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

子窗口

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

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

更多细节:使用 JavaScript 从子窗口访问父窗口,反之亦然

于 2012-07-11T09:22:03.510 回答
3

几个选项。

  1. 跨文档消息传递允许您在窗口之间传递事件。为此,您需要拥有目标窗口的句柄,只有当目标是<iframe>(例如,通过window.frames,或window.parent来自 iframe 的 POV)或者目标是当前窗口打开的窗口时,您才能真正获取该句柄通过window.open()window.opener从弹出窗口的 POV。
  2. Shared Workers可以连接其他不相关的窗口,就像跨文档消息传递一样。不过, Shared Workers仅在 Chrome 和 Safari中可用。
  3. 服务器发送的事件可以使用服务器来代理您原本不相关的窗口之间的通信。这需要到服务器的往返行程(因此不完全基于客户端)并且在 Internet Explorer 中不可用
  4. Web Sockets也是一种选择。它们也受到服务器往返的影响,并且在 Internet Explorer 中不可用。有socket.io,它将这个功能填充到旧的 Internet Explorer 中 - 所以可能是一个可行的解决方案。
  5. 一个骇人听闻的解决方案是滥用 LocalStorage。它适用于现代浏览器和 IE8。
  6. jQuery BrowserEvent是我以前玩过的东西。它滥用window.event浏览器和浏览器的本地存储能力来模拟浏览器之间的传递事件。不过,这不是您想在生产环境中使用的东西。

德国人可能想看看HTML5 中的 Kommunikations-APIs - Welche wann nutzen?

于 2012-07-11T09:28:16.660 回答
0

是的,如果在父窗口中使用 window.open 方法打开带有产品信息的窗口,那将是可能的。

这样,您可以诱导这两者之间的通信(严格来说,没有事件),但可以使用一些额外的代码。

于 2012-07-11T08:47:31.700 回答