jquery 窗口. unforeunload显示div IE7问题

cuxqih21  于 2023-01-25  发布在  jQuery
关注(0)|答案(2)|浏览(118)

目前,我正在开发一个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>

希望有人能帮我。

68bkxrlz

68bkxrlz1#

您需要在jQuery选择器上的id之前加上#:

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

qyzbxkaa2#

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

相关问题