使用JavaScript window.open()发生奇怪的IE7行为

时间:2009-01-25 19:52:20

标签: asp.net javascript internet-explorer

以下代码已知在三周前正在运行。在此期间,我们安装了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上的字段中,单独寻址每个元素并修改其innerText。然后用户关闭了bar.aspx并且foo.aspx离开了它,除非现在它在某些字段中具有bar.aspx的值,并且用户使用foo.aspx开心地前进。这已经工作了两年多。

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

  1. 如果我正在测试并直接导航到foo.aspx,那么在点击按钮bar.aspx后会打开然后突然焦点切换回foo.aspx,弹出对话框显示“您正在查看的网页我试图关闭窗口。你要关闭这个窗口吗?“如果我选择”否“,那么foo.aspx会保持活着状态,我必须让Alt-Tab返回bar.aspx,之后一切正常之前。然而,这对用户来说将是一种痛苦。注意:NOWHERE在foo.aspx NOR bar.aspx是一个呼叫关闭()方法!!!所以我不明白为什么弹出窗口会说出它的内容。

  2. 如果我通过应用程序访问foo.aspx,这意味着它已经以编程方式打开而不是由用户显式打开,那么bar.aspx会打开,你可以看到foo.aspx在它后面消失(关闭)。然后bar.aspx会收到JavaScript错误,因为window.opener不再可用。

  3. 场景#1不是最优的,但至少是一个有效的解决方法(如果有一些用户培训问题,训练他们点击“否”,然后是Alt-Tab,之前没有发生过这种情况。)鉴于bar.aspx的整个目的是将这些值写回foo.aspx,#2在极端情况下是非最优的。

    需要注意的其他事项

    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()。

      < / LI>

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

      感谢您提出的所有建议。

4 个答案:

答案 0 :(得分:1)

它可能是一个拼写错误,但在示例代码中的bar.aspx之后缺少“。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

奇怪的是,我要做的第一件事就是在代码中修复一些奇怪的东西。

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

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

答案 3 :(得分:0)

弹出窗口阻止程序是否会关闭弹出窗口?