将window.open响应对象绑定到html元素?

时间:2013-05-11 06:24:01

标签: javascript jquery

我尝试使用.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();
  }

}

1 个答案:

答案 0 :(得分:2)

您使用dataWinnewWinwindowClosed作为全局变量。将它们范围扩展到本地功能。除此之外,您对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()的简单调用,您将无法在那里实现所需的功能。

相关问题