【问题标题】:How to focus on a previously opened window using window.open()如何使用 window.open() 关注先前打开的窗口
【发布时间】:2011-12-30 01:31:10
【问题描述】:

我想为网站打开一个弹出窗口并保留它以供音乐播放器在用户浏览页面时播放无缝音乐。

我想要实现的是,当用户第一次单击“音乐”按钮时,会打开一个新的弹出窗口,使用 window.open(完成)。第二部分是当用户导航到其他页面并再次单击“音乐”按钮时,已经打开的窗口会获得焦点,但不会再次加载。

然而发生的情况是,一旦用户离开原始页面,浏览器就会忘记窗口已打开并且 focus() 停止工作。只要用户停留在同一页面上,focus() 似乎就可以工作。

我发现了一个类似的问题,并尝试根据该问题实现我的代码:

JavaScript window.open only if the window does not already exist

这是我目前写的代码:

$('a.music').click(function(){
        if(typeof(winRef) == 'undefined' || winRef.closed){
            winRef = window.open(this.href,'Music','left=20,top=20,width=500,height=500,toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=1,titlebar=0');
        } else {
            winRef.focus();
        }
        return false;
    });

如果您想看看,这里是现场网站。 http://ilhaamproject.com/

我应该如何引用打开的窗口以便它可以在不同的页面加载中工作?

【问题讨论】:

  • 仅供参考:某些浏览器(例如 Firefox)会阻止来自 JavaScript 的重新聚焦窗口调用,因为广告客户弹出窗口会出现偏差。有一个配置设置可以改变这一点,但默认是 JS 不能升/降窗口。
  • 我不明白。对我来说,Firefox 完美运行,我使用的是默认配置。火狐 8.0 / Windows。

标签: javascript popup window


【解决方案1】:

编辑:我收回我之前的回答。这是可以做到的。只需将打开的窗口设置为winRef 即可。在您的弹出窗口中,输入以下代码:

setInterval(function()
{
    opener.winRef = window;
}, 500);

就是这样!

可能有一些事件可以挂在开启窗口上,这样你就不必使用setInterval,但我不确定。


原答案:

你不能 - JavaScript 变量在脚本页面被卸载后消失了。您可以这样做的唯一方法是不卸载打开弹出窗口的页面。 您可以保持页面打开,但使用 AJAX 更改其内容。或者您可以在上周使用frames technique I suggested 回答类似问题。

【讨论】:

  • 谢谢。有没有办法检查是否打开了一个带有title = ...或URL = ...的窗口?这样我可以从可用窗口中选择一个,还是不允许读取打开的窗口列表?
  • @zsero - 我想出了一个更好的方法。请参阅我的更新答案。
  • 它仍然对我不起作用。我只是JS的初学者,也许我做错了什么。这是我如何实现你的:pastebin.com/7m8g8Phv
  • @zsero - 确保setInterval 代码在弹出窗口的页面中。如果弹出窗口的页面与其父级不在同一个域中,则由于Same Origin Policy,它将无法工作。你可以通过使用 iframe 来克服这个问题。
  • 非常感谢!我自己永远也不会想到这一点。我实现了一个 iframe + 脚本,现在它可以完美运行了!谢谢!
猜你喜欢
  • 2019-11-23
  • 2011-01-17
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-04
相关资源
最近更新 更多