代码之家  ›  专栏  ›  技术社区  ›  Joop

window.unbeforeunload show div ie7问题

  •  0
  • Joop  · 技术社区  · 15 年前

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

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

    对于Safari和Firefox,当用户单击链接或刷新页面时,它可以正常工作。然而,在IE7中,只有当用户单击链接时,DIV才可见,而不是当用户刷新页面时。

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

    当然,我已经在找一些解决办法了。下面的代码显示了IE7中的警报,但是DIV仍然不可见。

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

    我的部门代码:

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

    希望有人能帮我。

    2 回复  |  直到 13 年前
        1
  •  0
  •   Joseph Earl    15 年前

    为什么不使用onload侦听器?虽然速度会稍慢一些,但应该更可靠。

    事实上,在环顾四周之后,我不确定修改DOM是否有任何意义,除非 onBeforeUnload 处理程序返回 false 首先,即强制用户保持在同一页面上。

    据我所知 预先卸载 事件被激发 只是 在卸载页面之前,如果不返回 浏览器将卸载页面和DOM,之后执行的任何javascript都将是无意义的。

    这并不能解释为什么JavaScript不能正确执行。 在里面 这个 卸载前打开 功能,但从我所看到的站点来看,只使用 window.alert window.prompt 对话框询问用户是否想离开站点,然后在用户决定留下时经常执行javascript。

    因此,我猜想,当触发此事件时,某些浏览器可能不允许进行DOM操作——因为如果卸载了页面,那么所做的任何DOM操作都是毫无意义的。

    所以:

    1. 返回 在你的 预先卸载 方法,然后显示预加载程序(尽管这将停止导航到下一页)
    2. 使用 onLoad 下一页的事件以显示预加载程序图像

    另请注意:Opera 9.5及以下版本不支持此活动(我对更高版本不确定),但Gmail确实能够在Opera中抓住后退按钮。

    可能相关的是 this security warning 对于IE7的实施 预先卸载 事件-微软可能以某种方式修补了它,阻止了你想做的事情。而我 知道 IE6及以下版本不允许以下命令 document.location='' 预先卸载 出于安全原因。

        2
  •  1
  •   Bo Persson Touseef    13 年前

    您需要将放在jquery选择器上的ID之前:

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