弹出窗口激活时,自动加载页面启动到弹出窗口

时间:2013-04-07 19:15:45

标签: javascript popup

难以拿出头衔,我道歉。

问题是:由于现代网络浏览器禁用弹出窗口,我需要解决方法。

当访问者访问网站时,他们会提示按下按钮。按下按钮后,将使用以下代码启动弹出窗口:

w = window.open('/audio/audioplayer.php?id='+audioId, 'audioplayer', params);

现在弹出窗口打开了,我希望当访问者查看其他页面时,弹出窗口会根据他们所在的页面加载特定信息。

我不确定这是否可行或如何执行此操作(检查弹出窗口是否打开,是否加载信息,以及是否重新显示按钮)

2 个答案:

答案 0 :(得分:0)

我认为不可能检测弹出窗口的打开位置。

您是否考虑过使用对话框?而不是弹出窗口?

答案 1 :(得分:0)

window.open返回一个windowObjectReference - 这是你可以与弹出窗口对话的唯一方法。特别是,您可以使用windowObjectReference.closed属性判断该窗口是否已关闭。并且弹出窗口具有window.opener属性,该属性引用父窗口。您可以使用它们进行沟通。

但是,您似乎希望在页面加载之间保持此通信。您有几个选择:

  • 尽量保持窗口之间的链接。问题是,当父窗口重新加载时,所有javascript变量都会重置,并且无法恢复对弹出窗口的引用 - 除非弹出窗口使用window.opener设置它。 This link显示了这种方法,也显示了另一种方法。
    你可以认为它既丑陋又聪明。但它并不完美。 (如果用户在新链接中打开页面,则无法执行任何操作)
  • 使用主页和弹出页面中的ajax与服务器通信。当顶级页面想要向弹出窗口发送消息时,它们会向您的服务器启动XMLHttpRequest,该服务器会通知脚本在“队列”中留下消息。弹出页面定期轮询/长时间轮询服务器XHR(或server sent events,我个人最喜欢的)并相应更新自己的内容。
    这可能比你更复杂/更昂贵但它也是最安全的解决方案。
  • 不要像使用其他答案那样使用弹出窗口。使用position: fixed的div可以获得类似的结果,并且可能会让您远离Windows之间的通信方法,但是它也会导致每页有一个对话框,因此您需要询问服务器是否有另一个实例对话框正在运行。不太确定其他同步方法是否可行(localstorage?)