绑定窗口.打开HTML元素的响应对象

Binding window.open response object to an html element?

本文关键字:响应 对象 元素 HTML 窗口 打开 绑定      更新时间:2023-09-26

这里我试图使用.data()来存储来自window.open函数的对象数据。但它似乎不起作用,所有我得到的是undefineddataWin变量。

我想知道如何完成一个函数,将打开一个新窗口,当一个窗口没有打开,否则只有.focus()在一个已经打开的窗口,使用window.open。因为当我在相同的窗口名称上使用window.open时,它会导致新窗口刷新,这对我的应用程序来说是一个问题。

如果有一种方法来存储一个对象到变量,使它可以绑定到一个唯一的html元素?
我试着得到undefined

或者,是否有一种方法来检查窗口是否已经通过窗口名称打开?(在谷歌上搜索后没有找到任何可以做到的)

无论如何,这是我正在尝试的,没有任何运气:

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, 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();
  }
}

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

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