popstate何时开火?

问题描述

| 我按照规范将所有代码都放在$(document).ready中,但我的\'popstate \'侦听器也应该放在此代码的末尾吗?还是有关系吗?     

解决方法

这并不重要,因为这是一个事件,甚至可以在您的“ 0”方法之前完成。唯一需要放在ѭ1里面的是与DOM交互的代码。其他所有内容都不会(可能不应该)放置在文档就绪状态中。 例:
window.onpopstate = function() {
    // binding this event can be done anywhere,// but shouldn\'t be inside document ready
};

$(document).ready(function() {
    // DOM manipulation and other stuff
});
现在,实际触发popstate的时间与绑定时的状态有很大不同。根据Mozilla的文档:        每当活动历史记录条目更改时,都会将popstate事件调度到窗口。如果要激活的历史记录条目是通过调用history.pushState()创建的,或者受调用history.replaceState()的影响,则popstate事件的state属性包含历史记录条目的state对象的副本。        ,我很困惑,因为popstate在每次页面加载时都会触发(我使用chrome)。 从https://developer.mozilla.org/zh-CN/docs/DOM/window.onpopstate:   浏览器在页面加载时倾向于不同地处理popstate事件。   Chrome和Safari总是在页面加载时发出popstate事件,但是   Firefox没有。 因此,在chrome(显然是野生动物园)中,将执行jquery ready方法,然后执行popstate事件。 也就是说,如果您将事件附加到ready(或该事件的body.onload)中,都没有关系,则popstate事件将在您的ready方法完成后发生。 在firefox(16.0.1)中,popstate事件不会在页面加载时触发(我无法测试IE 10)。     ,只需在每次推入历史记录或替换该状态时向该状态添加一个键,然后在popstate事件中检查它,如果根本不使用该状态,则只需将{}作为状态并退出弹出窗口即可如果event.state为null,则返回state。     ,https://developer.mozilla.org/zh-CN/docs/Web/API/WindowEventHandlers/onpopstate 调用
history.pushState()
history.replaceState()
不会触发popstate事件。当在同一文档的两个历史记录条目之间导航时,仅通过执行浏览器操作(例如单击“后退”按钮(或在JavaScript中调用ѭ5))才能触发popstate事件。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...