在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML5  HTML/ js中為何直接監(jiān)聽pushState事件無效?

js中為何直接監(jiān)聽pushState事件無效?

chrome 63,直接監(jiān)聽pushState事件無效:

window.addEventListener("pushState", function () {
        // code
    });

直接監(jiān)聽replaceState也是無效的,popstate有效。

我搜索之后在jb51上找到了一個(gè)辦法,先添加一段代碼,再添加監(jiān)聽就可以了。

var _wr = function(type) {
  var orig = history[type];
  return function() {
    var rv = orig.apply(this, arguments);
    var e = new Event(type);
    e.arguments = arguments;
    window.dispatchEvent(e);
    return rv;
  };
};
history.pushState = _wr('pushState');
history.replaceState = _wr('replaceState');

那么為什么直接監(jiān)聽無效呢?是瀏覽器的問題還是什么原因?

測(cè)試網(wǎng)址:pixiv 特輯(需要科學(xué)上網(wǎng)),從這個(gè)頁面進(jìn)入子頁面用的就是pushState。

回答
編輯回答
下墜

沒有onpushstate這個(gè)事件,當(dāng)然無法監(jiān)聽到了。

可以把history劫持一下:

(function(history){
    var pushState = history.pushState;
    history.pushState = function(state) {
        if (typeof history.onpushstate == "function") {
            history.onpushstate({state: state});
        }
        // ... whatever else you want to do
        // maybe call onhashchange e.handler
        return pushState.apply(history, arguments);
    };
})(window.history);
history.onpushstate = function(e) {
    console.log('pushed');
}

效果:

clipboard.png

2018年8月22日 14:40