【问题标题】:On IE9, Win 7 window.open() returns null instead of reference of the opened window在 IE9 上,Win 7 window.open() 返回 null 而不是打开窗口的引用
【发布时间】:2011-08-10 16:19:11
【问题描述】:

我正在尝试类似下面的东西,

var myWindow = null;
if(!myWindow || myWindow.closed)
{
    myWindow = window.open(url, windowId);
}
else 
{
    myWindow.focus();   
}

所有浏览器都返回 window.open() 的窗口引用,但 IE 9 返回 NULL。有没有人有更多关于为什么返回 null 或者可能是 IE9 的解决方法的信息?

【问题讨论】:

  • 就在我们以为自己已经过了 IE6 的黑暗岁月的时候...
  • 你确定吗?它似乎返回一个对象,而不是 null。
  • 我认为如果弹出窗口被阻止,它会返回“null”,例如。如果是自动弹出窗口。但如果它是由点击触发的,那么它就会起作用。
  • 目标窗口的 URL 是否在不同的区域(例如 Internet->Intranet,或 Internet->Trusted 等)?
  • @EricLaw:如果我们取消选中 Internet 选项->安全->此区域的安全级别中的启用保护模式,window.open 将返回一个引用对象。我可以获得更多关于这方面的信息吗?我的用例是 mysite.com 打开 someothersite.com 的弹出窗口。 mysite.com 将使用上面给出的 JS 代码。

标签: javascript browser internet-explorer-9


【解决方案1】:

window.open 如果在 Internet 选项->安全->此区域的安全级别 下选中了启用保护模式并且 ZONE 不同,则返回 NULL 引用对象,即在我的情况下,本地文件从 Intranet 打开一个弹出窗口。

window.open 返回一个引用对象,即使当 mysite.com 在弹出窗口(即 Internet->Internet

中打开 someothersite.com 时选中了启用保护模式

【讨论】:

    【解决方案2】:

    出于好奇,你的windowId 是什么?里面有空格吗?

    因为,apparently IE9 will fail if there's a space in the window title

    【讨论】:

    • 调用时会失败,IE7+ 经常从调用中返回 null 而不是子窗口的句柄。
    • 窗口id没有空格,它的“mywindow”
    • 那是我的问题!谢谢奥兹!
    【解决方案3】:

    实际上,在我的情况下,如果我打开 localhost 或 Intranet 站点 URL,我会得到 window.open reference null。如果我的弹出窗口包含任何互联网站点 url,那么我将获取 window 对象作为参考。 我做了以下来解决这个问题:

    • 打开 IE > 工具 > Internet 选项
    • 转到安全选项卡
    • 点击复选框启用保护模式
    • 重启IE

    现在,它开始为我提供使用 Intranet 站点打开的弹出窗口的窗口对象引用。

    另外,它可能是安全的或添加到受信任站点区域的 URL 问题。如果你能提供 URL 会有所帮助。

    希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      我们的应用遇到了这个问题。我们正在使用 Dropbox 进行外部上传,但它无法正常工作。

      这就是我们修复它的方式。总结不同的读取和解决方案。如果任何部分不正确或没有意义,请告诉我。

      Root Cause:

      从 IE11 开始,Windows 开始在启动时为应用程序分配安全级别。低安全窗口和高安全窗口。同样启动 IE11,当新弹出窗口打开时,它不是主浏览器窗口的子窗口。相反,它是一个全新的 IE11 实例,分配了不同的安全级别。通常,外部上传机制使用 JavaScript 的跨窗口消息传递功能。如果这不起作用,则外部上传不起作用。根据 Windows 安全标准,低安全性窗口不能向高安全性窗口发送消息。退后一步,看看我们的 Windows 机器,它们是由我们的内部团队运送的。默认情况下,我们所有的域 Web 应用程序都添加到我们 Windows 机器中的受信任站点。但是像 Dropbox 这样的外部上传链接不会添加到受信任的站点。所以当你在 IE11 中打开 Our App 时,windows 会自动将 IE11 窗口标记为高安全性窗口。现在,当您尝试通过 Dropbox 上传设计文件时,因为 Dropbox 不是受信任的站点,创建的新弹出窗口是一个安全级别较低的新 IE11 实例。因此,在 Dropbox 窗口打开后,它会失去与作为 Our App 的父窗口的连接。这导致外部上传出现问题

      Fix:

      1. 通过 Internet 选项 > 安全 > 受信任的站点将 yoursite.com 和 dropbox.com 添加到 IE11 中的受信任站点,或者将它们都删除。

      2. 在 IE11 中启用保护模式,方法是通过 Internet 选项 > 安全 > 启用保护模式标记启用 IE11 中的保护模式,然后重新启动浏览器。

      这意味着这对我们的客户来说不是真正的问题。如果它对他们不起作用,则可能是由于某种原因,其中一个站点被添加到受信任的站点列表中,但不是两者都添加。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多