7

我的网站上有一个链接,可以打开一个新窗口,指向播放很长的音频文件的页面。如果多次单击链接,我当前的脚本可以正常打开页面并且不会刷新。但是,当我移动到我网站上的单独页面并再次单击此链接时,它会重新加载。我知道当父元素更改时,我将丢失我的变量,因此我需要打开窗口,覆盖现有内容。我正试图找到解决方案。我宁愿不使用 cookie 来实现这一点,但如果需要,我会这样做。

我的脚本如下:

function OpenWindow(){
    if(typeof(winRef) == 'undefined' || winRef.closed){
    //create new
    winRef = window.open('http://samplesite/page','winPop','sampleListOfOptions');
    } else {
    //give it focus (in case it got burried)
     winRef.focus();
    } 
}
4

3 回答 3

6

您应该首先在winRef = window.open("", "winPopup")没有 URL 的情况下调用 - 如果它存在,这将返回一个窗口,而无需重新加载。并且仅当winRefnull或空窗口时,才创建新窗口。

这是我的测试代码:

var winRef;

function OpenWindow()
{
  if(typeof(winRef) == 'undefined' || winRef.closed)
  {
    //create new
    var url = 'http://someurl';
    winRef = window.open('', 'winPop', 'sampleListOfOptions');
    if(winRef == null || winRef.document.location.href != url)
    {
      winRef = window.open(url, 'winPop');
    }
  }
  else
  {
    //give it focus (in case it got burried)
    winRef.focus();
  } 
}

有用。

于 2012-11-16T10:15:38.023 回答
2

就像您说的那样,在离开原始页面后,您会忘记您可能打开了哪些窗口。

据我所知,没有办法“重新获得”对该特定窗口的引用。您可能(使用 cookie、服务器端会话或其他)知道该窗口已经打开,但您永远无法从不同的页面(即使在同一个域上)直接访问它。已经打开的窗口之间的这种通信可以在 ajax 和服务器端代码的帮助下进行模拟,当在两个窗口之间共享一些信息时,它们将充当代理。然而,这不是一个简单或干净的解决方案。

于 2012-11-16T08:45:41.740 回答
2

感谢 Stan 和http://ektaraval.blogspot.ca/2011/05/how-to-set-focus-to-child-window.html

我的解决方案创建了一个突破性弹出式 mp3 播放器,该播放器在站点范围内保持活动状态,并且仅在单击链接按钮之前未打开窗口时才会刷新

function OpenWindow(){
    var targetWin = window.open('','winPop', 'sample-options');
    if(targetWin.location == 'about:blank'){
        //create new
        targetWin.location.href = 'http://site/megaplayer';
        targetWin.focus();
    } else {
        //give it focus (in case it got burried)
        targetWin.focus();
    } 
}
于 2012-11-16T10:07:45.557 回答