【问题标题】:window.open() still returns nullwindow.open() 仍然返回 null
【发布时间】:2012-07-05 07:24:12
【问题描述】:

我在 Windows 7 上使用 IE8。参考了几个线程并了解在 IE8 中,当我使用 window.open 弹出一个新窗口时,JavaScript window.open 返回 null 值。

如果我以管理员身份运行 IE 或禁用保护模式,我会看到 window.open 返回预期的对象。

我正在寻找除上述选项之外的解决方案。对于这样一个小功能(打开一个弹出窗口),我不能要求客户以管理员身份运行 IE 或禁用保护模式。

如果有任何解决方法,请告诉我。这将是一个很大的帮助。

首先,我想确保当用户多次单击链接时只打开一个窗口,并将焦点放在已经打开的窗口上。为了实现这一点,我需要从 window.open 获取对象,以便我可以检查窗口是否已经打开并将焦点放在已经打开的窗口上。否则打开一个新窗口。

【问题讨论】:

标签: javascript


【解决方案1】:

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

window.open 返回一个引用对象,即使当 yoursite.com 在弹出窗口(即 Internet->Internet)中打开 someothersite.com 时选中了启用保护模式

【讨论】:

    【解决方案2】:

    您可以使用 window.showModalDialog 作为 window.open 方法的替代或替代方法。

    它比 window.open 更安全。它不允许用户点击父页面。

    示例用法:

    var myFeatures = "dialogWidth:1060px;dialogHeight:550px;resizable:yes";
    
    window.showModalDialog(url,window,myFeatures);
           //Here window is an object, no need to assign or declare.
    

    如果您需要更详细的解释,请参阅Here。 //第五题。

    【讨论】:

    • 感谢您的回复!我尝试了您建议的选项。但这里的问题是父窗口被锁定。这又是一个问题。我应该能够打开一个且只有一个子窗口,但用户仍然应该能够访问父窗口以进行其他工作。如果用户错误地再次点击了相同的链接,让他将注意力集中在之前打开的子窗口上。
    • 令人惊讶的是,在我使用 showModelDialog 的情况下,它的行为非常奇怪。我为子窗口提供的 url 是 google.com 来测试。一旦子窗口打开,如果我在子窗口中进行谷歌搜索,每次我点击谷歌搜索时它会自动打开两个额外的窗口。
    • 已弃用 - 目前在 Chrome 或 Firefox 中不可用 developer.mozilla.org/en-US/docs/Web/API/Window/showModalDialog
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多