0

很难想出一个标题,我道歉。

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

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

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

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

我不确定这是否可行或我如何才能做到这一点(检查弹出窗口是否打开,是否正在加载信息,是否没有重新显示按钮)

4

2 回答 2

0

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

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

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

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

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

于 2013-04-07T19:21:58.663 回答