2013-04-07 104 views
0

很难想出一个标题,我的道歉。当弹出窗口处于活动状态时,启动时自动加载页面到弹出窗口

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

当访问者访问网站时,他们会提示按下按钮。

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

现在,弹出打开时我会当访问者浏览弹出加载特定信息的页面,如:一旦按下按钮,弹出窗口与下面的代码推出基于他们所在的任何页面。

我不知道这是可能的,或者我怎么能做到这一点(检查弹出窗口是打开的,如果它是加载信息,而如果它不重新显示该按钮)

回答

0

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

你有没有想过使用对话框?而不是弹出窗口?

0

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

但是,似乎你想保持页面加载之间的这种沟通。你有几个选择:

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