【问题标题】:window.open() returns undefined or null on 2nd callwindow.open() 在第二次调用时返回 undefined 或 null
【发布时间】:2009-06-06 18:50:39
【问题描述】:

我有以下场景:

我点击一个链接: 打开一个名为“popup”的弹出窗口,在其中加载一个 pdf(在 IE6 中)。

在不关闭弹出窗口的情况下,我再次单击该链接,这应该会在弹出窗口中重新打开 pdf,但会抛出一个 javascript 错误: 找不到成员

用来打开弹窗的javascript函数是:

function openWindow(url, name, props) {
  var windowRef = window.open(url, name, props);
  if (!windowRef.opener) {
    windowRef.opener = self;
  }
  windowRef.focus(); //error at this line, windowRef must be null
  return windowRef;
}

问题: 我如何解决这个问题,而不是每次都打开一个新的弹出窗口?

【问题讨论】:

  • 是否有弹出窗口阻止程序阻止它打开窗口?放警报(windowRef);在 window.open 之后,查看对象是否未定义。

标签: javascript internet-explorer-6 popup


【解决方案1】:

这是互联网上每个人都在使用的 hack:

function openWindow(url, name, props) {
  if(/*@cc_on!@*/false){ //do this only in IE
    var windowRef = window.open("", name, props);
    windowRef.close();
  }
  var windowRef = window.open(url, name, props);
  if (!windowRef.opener) {
    windowRef.opener = self;
  }
  windowRef.focus();
  return windowRef;
}

【讨论】:

    【解决方案2】:

    尝试在函数 openWindow() 之外使用全局变量 windowRef。像这样的:

    var WindowRef = null;
    
    function openWindow(url, name, props) {
      if(WindowRef == null){
        WindowRef = window.open(url, name, props)
      }
      else{
        WindowRef.document.location = url
      }
      if (!WindowRef.opener) {
        WindowRef.opener = self;
      }
      WindowRef.focus();
      return WindowRef;
    }
    

    【讨论】:

    • 这不起作用,WindowRef.document.location = url 部分给了我访问被拒绝的错误。
    • 的url是否在同一个域中?
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2023-03-21
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2012-03-29
    相关资源
    最近更新 更多