在IE9中的onunload事件处理程序中调用时,window.open不再有效

时间:2011-03-29 22:01:47

标签: javascript internet-explorer-9 window.open onunload

在我的Web应用程序中,我使用自定义URL协议启动桌面应用程序。例如:“fakeproto://”将在桌面上启动“fakeproto.exe”。如果您不知道我在说什么,请阅读:Registering an Application to a URL Protocol

我需要一种方法来确保在尝试启动之前在用户的PC上安装了“fakeproto.exe”。这有点像黑客,但我让它适用于所有主流浏览器。 IE提出了最多的问题并且具有独特的实现。

在Javascript中,我首先尝试加载自定义网址协议:

window.open('fakeproto://', '_self');

在此之前,我实际上定义了以下onunload事件处理程序:

window.onunload = function()
{
     window.open('help.php', '_self');
}

因此,如果桌面无法识别自定义URL协议,IE将只是离开当前页面并转到“无法显示网页”。在这种情况下,onunload事件处理程序将触发并打开help.php。

这在IE7& IE8,但是一旦我升级到IE9,这个不再有效吗?它转到“无法显示网页”而不是help.php。

使用调试器,onunload事件处理程序正在触发并且代码正在正确执行,但由于某种原因,window.open调用不起作用???我也禁用了弹出窗口阻止程序,以确保它不是那样。没有运气。

有人有什么想法吗?有人听说IE9对window.open更严格吗?有人知道原始问题的任何替代解决方案吗?

顺便说一句,如果我将help.php打开到新窗口,我可以让它工作。

window.onunload = function()
{
     window.open('help.php', '_blank');
}

但这仅在禁用任何弹出窗口阻止程序时有效。我想避免使用这个解决方案。

1 个答案:

答案 0 :(得分:0)

是的,IE9会阻止onunload处理程序中的导航。