0

在这里,我试图用来.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();
  }

}
4

1 回答 1

2

您正在使用dataWin,newWinwindowClosed作为全局变量。将它们限定为本地函数。除此之外,您对 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();
  }
}

确保您传递给函数的名称实际上具有相应的 DOM 元素,其 ID 为“id-NAME”,否则您的数据将无处可去。

请记住:例如在谷歌浏览器中 .focus() 被阻止用于任何弹出窗口。因此,使用对 .focus() 的简单调用,您将无法在那里实现所需的功能。

于 2013-05-11T06:55:32.340 回答