我想编写一个能够在 window.onpopstate 或 window.onload 上执行某些操作但不会执行两次的 JavaScript 代码(请注意,chrome 在 onload 和单击后退导航按钮时都会触发 popstate 事件)
我希望它与主要的现代浏览器兼容(IE10 firefox chrome opera safari)
而且我宁愿不使用任何库 - 甚至 jquery 也不使用。
类似这样的东西(当然语法正确):
window.onload || window.onpopstate = function(){
window.alert("hello world");
}
谢谢
编辑 1
根据你的建议,我尝试了这个:
var ranAlready=false;
window.onload = function(){
if (!ranAlready){
window.alert("onload was true");
ranAlready=true;
}
};
window.onpopstate = function(){
if (!ranAlready){
window.alert("popstate was true");
ranAlready=true;
}
};
但现在我不确定如何将变量设置回 false..因为它取决于浏览器等..
编辑2
我需要它多次工作,因为用户可能会点击一些ajax链接,因此页面不会刷新,但url会改变,因此他可能会点击后退按钮。这意味着变量必须在某个时刻设置回 false/但我不知道什么时候..
最佳答案
问题在于,在 Chrome 中,“popstate”事件在页面加载时触发,因此处理程序将运行两次。您可以通过检查在 popstate 上运行时的历史状态来检测它是否在初始加载时运行来修复此问题。
function showAlert() {
window.alert("hello world");
}
function showAlertOnPopState(){
if (window.history.state == null){ // This means it's page load
return;
}
showAlert();
}
window.onload = showAlert;
window.onpopstate = showAlertOnPopState;
fiddle :http://jsfiddle.net/ER8zC/2/
在这里找到了history.state技巧:Popstate on page's load in Chrome
关于javascript - 在 window.onpopstate 或 window.onload 上执行某些操作,但不要执行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18494825/