相关疑难解决方法(0)

在Chrome中加载页面上的Popstate

我正在为我的网络应用程序使用History API,但有一个问题.我执行Ajax调用以更新页面上的一些结果并使用history.pushState()来更新浏览器的位置栏而不重新加载页面.然后,当然,我使用window.popstate来恢复单击后退按钮时的先前状态.

问题是众所周知的 - Chrome和Firefox以不同的方式对待popstate事件.虽然Firefox没有在第一次加载时启动它,但Chrome确实如此.我想拥有Firefox风格并且不会在加载时触发事件,因为它只是在加载时使用完全相同的结果更新结果.除了使用History.js之外是否有解决方法?我不想使用它的原因是 - 它本身需要太多的JS库,因为我需要在已经有太多JS的CMS中实现它,我想最小化JS我放入它.

所以,想知道是否有办法让Chrome不加载'popstate'加载,或者有人试图使用History.js,因为所有库一起混合成一个文件.

html5 google-chrome javascript-events browser-history

94
推荐指数
5
解决办法
5万
查看次数

window.onpopstate页面加载

我正在玩window.onpopstate,有一件事让我有点恼火:

浏览器倾向于在页面加载时以不同方式处理popstate事件.Chrome和Safari总是在页面加载时发出popstate事件,但Firefox不会.

资源

我测试了它,是的,在Chrome和Safari 5.1+中,popstate事件在页面加载时触发,但不在Firefox或IE10中触发.

问题是,我只想听popstate用户点击后退前进按钮的事件(或者历史记录是通过javascript更改的),但是不想在页面加载上做任何事情.

换句话说,我想区分popstate事件与页面加载与其他popstate事件.

这是我到目前为止尝试过的(我使用的是jQuery):

$(function() {
  console.log('document ready');

  setTimeout(function() {
    window.onpopstate = function(event) {
      // Do something here
    }, 10);
});
Run Code Online (Sandbox Code Playgroud)

基本上我尝试将我的listener函数绑定到popstate足够晚,以便在页面加载时不受限制,只是稍后.

这似乎有效,但是,我不喜欢这个解决方案.我的意思是,我怎么能确定为setTimeout选择的超时足够大,但不是太大(因为我不希望它等待太多).

我希望有一个更智能的解决方案!

javascript jquery html5

36
推荐指数
3
解决办法
6万
查看次数

jQuery绑定popstate事件未通过

我正在为History API编写一个小程序.我正在努力解决这个问题:

$(window).bind('popstate',  
    function(event) {
        console.log('pop: ' + event.state);
    });
Run Code Online (Sandbox Code Playgroud)

当我点击"上一步"按钮时,它会记录'pop:undefined'

但是,如果我这样做,事情就像预期的那样:

window.onpopstate = function(event) {
    console.log('pop: ' + event.state);
};
Run Code Online (Sandbox Code Playgroud)

它这次记录'pop:[object Object]'...

所以就像jQuery没有将事件对象传递给回调.
jQuery有问题吗?或者我弄乱了什么?

jquery html5 html5-history

25
推荐指数
1
解决办法
3万
查看次数