【发布时间】: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。现在的行为是这样的:
如果我正在测试并直接导航到 foo.aspx,然后单击按钮 bar.aspx 打开,然后焦点突然切换回 foo.aspx 并弹出对话框,其中显示“您正在查看的网页正在尝试关闭窗口。你想关闭这个窗口吗?” 如果我选择“否”,那么 foo.aspx 仍然存在,我必须使用 Alt-Tab 回到 bar.aspx,然后一切正常前。但是,这对用户来说将是一个痛苦。注意:在 foo.aspx 和 bar.aspx 中都没有调用 close() 方法!!!所以我不明白为什么弹出窗口会这么说。
1234563然后 bar.aspx 出现 JavaScript 错误,因为 window.opener 不再可用。
方案 #1 不是最佳方案,但至少可以解决(如果有些用户培训问题是训练他们按“否”然后按 Alt-Tab,在此之前这些都没有发生。场景#2 在极端情况下不是最优的,因为 bar.aspx 的全部目的是将这些值写回 foo.aspx。
其他注意事项
现在我们已经安装了 IE 7 和后续的 Active Directory 策略更改,即使在 IE 6 上也会发生这种行为。
foo.aspx 和 bar.aspx 都在 Web 服务器上运行,在同一个网站上,但在不同的虚拟目录中。这些是内部应用程序,只有经过身份验证的用户才能从我们的网络内部访问。
将服务器置于 Intranet 区域(通常位于该区域)或受信任站点中没有任何区别。我在区域和高级设置中都看不到适用于此行为的设置,并且 Intranet 和受信任的站点区域的政策都设置得非常宽松,尤其是在脚本行为方面。
我可以在 bar.aspx 及其客户端脚本中进行任何我需要的更改,但仅限于能够更改 foo.aspx 中的按钮单击 JavaScript 代码(该页面由供应商,而 bar.aspx 是内部开发的)。
-
我重申,除了通过 window.opener.document 进行更新之外,bar.aspx 不会触及 foo.aspx,当然也不会尝试对其调用 close()。
那么,问题仍然存在于 IE 7 中,或者更可能是在安全补丁中,会破坏这一点?我们有一家姊妹店在 IE 7 上运行相同的代码,他们没有报告这个问题。所以看起来它必须是环境的东西,现在我一直在想它必须是一个被应用的补丁。我会使用知识库文章、IE 设置、注册表破解、JavaScript 更改或其他任何方法来解决此问题。
感谢您提出的所有建议。
【问题讨论】:
标签: asp.net javascript internet-explorer