这里我尝试使用.data()
来存储来自window.open
函数的对象数据。
但它似乎不起作用,我得到的只是 dataWin
变量的 undefined
。
我想知道如何使用 window 完成一个在窗口未打开时打开新窗口的功能,否则仅在已打开的窗口上使用
。因为当我在同一窗口名称上使用 .focus()
.打开window.open
时,它会导致新窗口刷新,这对我的应用程序来说是一个问题。
是否有办法将对象存储到变量中,以便将其绑定(bind)到唯一的 html 元素?
我尝试得到未定义
或者,有没有办法检查窗口是否已按“窗口名称”打开? (在google上搜索后没有找到任何可以做到的)
无论如何,这就是我正在尝试的,但没有任何运气:
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();
}
}
最佳答案
您正在使用 dataWin
、newWin
和 windowClosed
作为全局变量。将它们的范围限定为本地函数。除此之外,您对未定义的检查是错误的。这是代码的修订版本,它将执行您想要的操作:
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() 来实现所需的功能。
关于javascript - 将 window.open 响应对象绑定(bind)到 html 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16494454/