在Chrome中的beforeunload中改变DOM

时间:2016-08-05 11:39:52

标签: onbeforeunload

是否可以在beforeunload处理程序中更改DOM?在用户按下"逗留"之后,Chrome似乎会应用DOM修改关于离开页面的浏览器警报,我希望隐藏页面的一部分,而此警报可见。

参见演示:

Set

https://jsfiddle.net/qmatic/6sLp7rmq/

到目前为止,我唯一的解决方案是将div设置为不透明度:0并在setInterval中设置一个不断重置此动画的代码。在代码运行时,div始终可见。 Chrome会在显示警报时停止所有代码,因此动画最终会一直运行到最后并隐藏div。但这是一个糟糕的解决方案 - 我不断更新DOM以重置动画。有没有人有更好的想法?

1 个答案:

答案 0 :(得分:0)

Chrome正在执行的过程似乎是:

1)调用处理程序,同步等待其返回值

2)如果返回(event.returnValue)被适当地定义,继续卸载

3)否则会出现某种模式弹出窗口,获得用户取消导航的权限。

4)如果取消导航,请停留在页面上并对页面视图应用刷新周期。

我在调试器中逐步执行了onbeforeunload处理程序,当我这样做时,样式更改 WILL 在模式对话框出现之前生效,而不是在关闭之后生效。这似乎表明使用调试器会引入额外的DOM刷新周期,否则在正常运行时不会发生这些周期。我试图找到一种方法来从处理程序中以编程方式获得其中一个刷新周期,但到目前为止还没有运气。

在其他浏览器中,似乎在上面的步骤1-4之间插入了刷新周期,从而产生了所需的行为。