window.unbeforeunload显示div IE7问题

时间:2010-03-10 14:14:13

标签: javascript javascript-events

目前我正在开发一个我正在使用预加载器图标的Web应用程序。我想要的是每次用户导航到另一个页面或刷新页面时,预加载器都会变得可见。到目前为止,我有以下解决方案:

window.onbeforeunload = function() { $("applicationdisabler").show(); };

对于Safari和Firefox,当用户点击链接或刷新页面时,它可以正常工作。但是在IE7中,div只有在用户点击链接时才会显示,而不是在用户刷新页面时显示。

用户可以通过点击F5(在Windows上)或浏览器提供的任何其他可能方式刷新页面。

当然,我一直在寻找一些工作。以下代码显示IE7中的警报,但div仍然不可见。

window.onbeforeunload = function() { $("applicationdisabler").show(); alert("come on!"); };

我的div的代码:

<div id="applicationdisabler"><img src="images/preloader.gif" /></div>

希望有人可以帮助我。

2 个答案:

答案 0 :(得分:1)

你需要把#之前的#放在jQuery选择器上:

$("#applicationdisabler").show();

答案 1 :(得分:0)

为什么不使用只使用onLoad侦听器?虽然它会稍微慢一点,但应该更可靠。

实际上经过一些调查后我不确定修改DOM是否有意义,除非onBeforeUnload处理程序首先返回false - 即强制用户保持在同一页面上。

据我了解,在卸载页面之前,onBeforeUnload事件被触发只是,所以如果你不返回false,浏览器将卸载页面和DOM ,之后执行的任何JavaScript都是毫无意义的。

这并没有完全解释为什么JavaScript在<{strong> onBeforeUnload函数中没有正确执行,但是从我看到的网站只使用window.alert或{ {1}}对话框询问用户是否要离开网站,然后在用户决定留下时经常执行JavaScript。

因此,我猜测某些浏览器在触发此事件时可能不允许进行DOM操作 - 因为如果页面被卸载,那么任何完成的DOM操作都是毫无意义的。

所以:

  1. window.prompt方法中返回false,然后显示您的预加载器(虽然这将停止导航到下一页)
  2. 使用下一页的onBeforeUnload事件来显示预加载器图片
  3. 另请注意:Opera 9.5及以下版本不支持此事件(我不确定以后的版本)但GMail确实设法捕获Opera中的后退按钮。

    IE7实现onLoad事件可能与this security warning有关 - 微软可能会以某种方式对其进行修补,以防止您尝试执行的操作。我知道 IE6及以下版本出于安全原因,不允许onBeforeUnload处理程序中的document.location=''等命令。