我的网站上有一个链接,可以打开一个播放非常长的音频文件的页面的新窗口。我当前的脚本可以正常打开页面,如果多次单击链接则不刷新。但是,当我移动到我的网站上的单独页面并再次单击此链接时,它会重新加载。我知道当父元素发生变化时,我将丢失变量,因此我需要打开窗口,覆盖现有内容。我试图找到解决方案。我宁愿不使用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();
}
}
答案 0 :(得分:6)
首先应该在没有URL的情况下调用winRef = window.open("", "winPopup")
- 这将返回一个窗口(如果存在),而不重新加载。仅当winRef
为null
或空窗口时,才会创建新窗口。
这是我的测试代码:
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();
}
}
有效。
答案 1 :(得分:2)
就像你说的那样,在离开原始页面之后,你会忘记你可能打开的窗户。
据我所知,没有办法“重新获得”对该特定窗口的引用。您可以(使用cookie,服务器端会话或其他)知道窗口已经打开,但您不会从不同的页面直接访问它(即使在同一个域中)。可以在ajax和服务器端代码的帮助下模拟已经打开的窗口之间的这种通信,当在两个窗口之间共享一些信息时,该代码将用作代理。然而,这不是一个简单而不干净的解决方案。
答案 2 :(得分:1)
感谢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();
}
}