【问题标题】:Strange IE7 behavior with JavaScript window.open()JavaScript window.open() 的奇怪 IE7 行为
【发布时间】:2009-01-25 19:52:19
【问题描述】:

已知以下代码在三周前可以运行。在此期间,我们安装了 IE 7 和一堆安全补丁。最终的问题是,有谁知道如何恢复旧的行为?

场景

我们在网页 1 中有以下 JavaScript 代码(我们称之为 foo.aspx),它是在单击按钮时调用的:

window.open("http://Foo/App2/bar.aspx, "_blank", "titlebar,status,width=650,height=600");

第二个网页 (bar.aspx) 应该在 foo.aspx 之上打开。用户做一些事情,当他们单击按钮时,bar.aspx 使用 JavaScript 通过 window.opener.document 将 bar.aspx 中的一些值写回 foo.aspx 上的字段,分别寻址每个元素并修改其内部文本。然后用户关闭 bar.aspx 并且在他们离开它的地方有 foo.aspx,除了现在它在某些字段中具有来自 bar.aspx 的值,并且用户愉快地使用 foo.aspx。这已经工作了两年多。

在过去的两周里,我们应用了一堆安全补丁并升级到 IE 7。现在的行为是这样的:

  1. 如果我正在测试并直接导航到 foo.aspx,然后单击按钮 bar.aspx 打开,然后焦点突然切换回 foo.aspx 并弹出对话框,其中显示“您正在查看的网页正在尝试关闭窗口。你想关闭这个窗口吗?” 如果我选择“否”,那么 foo.aspx 仍然存在,我必须使用 Alt-Tab 回到 bar.aspx,然后一切正常前。但是,这对用户来说将是一个痛苦。注意:在 foo.aspx 和 bar.aspx 中都没有调用 close() 方法!!!所以我不明白为什么弹出窗口会这么说。

  2. 1234563然后 bar.aspx 出现 JavaScript 错误,因为 window.opener 不再可用。

方案 #1 不是最佳方案,但至少可以解决(如果有些用户培训问题是训练他们按“否”然后按 Alt-Tab,在此之前这些都没有发生。场景#2 在极端情况下不是最优的,因为 bar.aspx 的全部目的是将这些值写回 foo.aspx。

其他注意事项

  1. 现在我们已经安装了 IE 7 和后续的 Active Directory 策略更改,即使在 IE 6 上也会发生这种行为。

  2. foo.aspx 和 bar.aspx 都在 Web 服务器上运行,在同一个网站上,但在不同的虚拟目录中。这些是内部应用程序,只有经过身份验证的用户才能从我们的网络内部访问。

  3. 将服务器置于 Intranet 区域(通常位于该区域)或受信任站点中没有任何区别。我在区域和高级设置中都看不到适用于此行为的设置,并且 Intranet 和受信任的站点区域的政策都设置得非常宽松,尤其是在脚本行为方面。

  4. 我可以在 bar.aspx 及其客户端脚本中进行任何我需要的更改,但仅限于能够更改 foo.aspx 中的按钮单击 JavaScript 代码(该页面由供应商,而 bar.aspx 是内部开发的)。

  5. 我重申,除了通过 window.opener.document 进行更新之外,bar.aspx 不会触及 foo.aspx,当然也不会尝试对其调用 close()。

那么,问题仍然存在于 IE 7 中,或者更可能是在安全补丁中,会破坏这一点?我们有一家姊妹店在 IE 7 上运行相同的代码,他们没有报告这个问题。所以看起来它必须是环境的东西,现在我一直在想它必须是一个被应用的补丁。我会使用知识库文章、IE 设置、注册表破解、JavaScript 更改或其他任何方法来解决此问题。

感谢您提出的所有建议。

【问题讨论】:

    标签: asp.net javascript internet-explorer


    【解决方案1】:

    这可能是一个错字,但示例代码中 bar.aspx 后缺少一个 "。

    【讨论】:

      【解决方案2】:

      以编程方式打开一个窗口并将名称设置为_blank,你为什么这样做? 我并不是说这与您的问题有任何关系,但这可能不是一个好主意。

      【讨论】:

        【解决方案3】:

        很奇怪,到目前为止,我要做的第一件事就是修复代码中的一些奇怪的东西。

        使用绝对路径,例如“/App2/bar.aspx”,不带协议或服务器名称,因为应用程序位于同一服务器上。

        您实际上无法控制 Intranet 区域之外的标题栏或状态栏,因此请从选项列表中删除这些值。

        【讨论】:

          【解决方案4】:

          弹出窗口拦截器是否关闭弹出窗口?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-07-05
            • 1970-01-01
            • 2013-01-20
            • 1970-01-01
            • 1970-01-01
            • 2011-07-28
            • 2012-05-30
            相关资源
            最近更新 更多