我尝试使用.data()
来存储window.open
函数中的对象数据。
但它似乎不起作用,我得到的undefined
变量dataWin
。
我想知道如何在窗口未打开的情况下完成一个打开新窗口的功能,否则仅使用.focus()
在已经打开的窗口上打开window.open
。因为当我在同一窗口名称上使用window.open
时会导致新窗口刷新,这对我的应用程序来说是一个问题。
如果有办法将对象存储到变量中,那么可以将其绑定到唯一的html元素?
我尝试得到undefined
或者,有没有办法检查窗口是否已由WINDOW NAME打开? (在搜索谷歌后,没有找到任何可以做到的事情)
无论如何,这是我尝试过的,没有任何运气:
function OpenNewWindow_Or_FocusOpenWindow(name) {
dataWin = $("#id-" + name).data('winData')
if (dataWin == 'undefined') { windowClosed = true }
else { windowClosed = dataWin.closed }
if ( windowClosed == true ) {
newWin = window.open('myurl' , "win" + name , 'options');
$("#id-" + name).data('winData',newWin);
if (newWin != null) { newWin.focus() }
}
else {
dataWin.focus();
}
}
答案 0 :(得分:2)
您使用dataWin
,newWin
和windowClosed
作为全局变量。将它们范围扩展到本地功能。除此之外,您对undefined的检查是错误的。以下是您的代码的修订版本,它将执行您想要的操作:
function OpenNewWindow_Or_FocusOpenWindow(name) {
var el = $("#id-" + name),
dataWin = el.data('winData'),
windowClosed,
newWin;
windowClosed = (typeof dataWin === 'undefined') ? true : dataWin.closed;
if (windowClosed) {
newWin = window.open('myurl' , "win" + name);
el.data('winData',newWin);
if (newWin) {
newWin.focus()
}
}
else {
dataWin.focus();
}
}
确保传递给该函数的名称实际上具有ID为“id-NAME”的相应DOM元素,否则您的数据将无处可寻。
请注意:,例如在Google Chrome浏览器中,.focus()会因任何弹出窗口而被屏蔽。因此,使用.focus()的简单调用,您将无法在那里实现所需的功能。