javascript - 将 window.open 响应对象绑定(bind)到 html 元素?

标签 javascript jquery

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

}

最佳答案

您正在使用 dataWinnewWinwindowClosed 作为全局变量。将它们的范围限定为本地函数。除此之外,您对未定义的检查是错误的。这是代码的修订版本,它将执行您想要的操作:

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/

相关文章:

javascript - 缩小图像使查看中心保持在中心

javascript - 在多次上传中,所有图像都附加到最后一个容器 div

javascript - 如何使用 Google Apps Script 将 LaTeX 方程式转换为可编辑方程式

javascript - compose 函数如何处理多个参数?

php - 添加购物车的错误函数

javascript - jQuery 代码中 PHP 文件中的 jQuery 变量

javascript - 重新打开切换开关后重新加载页面

javascript - 在 React 和 JSX 中使用度数符号

jquery - 如何使用 jQuery 使多个 DIV 保持相同的高度?

javascript - 克隆下拉菜单未按预期工作