目前,我正在开发一个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条答案
按热度按时间68bkxrlz1#
您需要在jQuery选择器上的id之前加上#:
qyzbxkaa2#
为什么不直接使用onLoad监听器呢?虽然它会稍微慢一点,但应该会更可靠。
实际上,在四处查看了一下之后,我不确定修改DOM是否有意义,除非
onBeforeUnload
处理程序首先返回false
-即强制用户停留在同一页面上。据我所知,
onBeforeUnload
事件是在页面卸载之前触发的,所以如果您不返回false
,浏览器将卸载页面和DOM,在此之后执行的任何JavaScript都将毫无意义。这并不能完全解释为什么JavaScript不能在
onBeforeUnload
函数中正确执行,但是从我所看到的网站来看,它们只使用window.alert
或window.prompt
对话框来询问用户是否想离开网站,然后如果用户决定留下来,就经常执行JavaScript。因此,我猜当这个事件被触发时,一些浏览器可能不允许DOM操作-因为如果页面被卸载,任何DOM操作都是毫无意义的。
所以要么:
1.在您的
onBeforeUnload
方法中返回false
,然后显示您的预加载器(尽管这将停止导航到下一页)1.使用下一页的
onLoad
事件来显示预加载器映像另请注意:Opera 9.5及以下版本不支持此事件(我不确定更高版本),但GMail确实设法捕捉Opera中的后退按钮。
可能与this security warning有关的是IE7的
onBeforeUnload
事件实现-有可能微软以一种阻止你试图做的事情的方式修补了它。而且我知道**IE6和更低版本出于安全原因不允许在onBeforeUnload
处理程序中使用document.location=''
这样的命令。