@
gesse @
cheeto @
codehz js 小白,不是很懂原理,但想请教新遇到的一个现象。
let _wr = function(type) {
let orig = history[type]
return function() {
let rv = orig.apply(this, arguments),
e = new Event(type)
e.arguments = arguments
window.dispatchEvent(e)
return rv
}
}
history.pushState = _wr('pushState')
window.addEventListener('pushState', function(e) {
console.log(e)
});
先是用上面这个方法实现了监听。
但是后来发现,如果在不同油猴脚本都调用同样的代码,会导致监听重复激活。
于是就把_wr 传入的 type 名后面加了一个 uniqueId,就比如:
history.pushState = _wr('pushState_scriptname')
这样一来,好像在原本 pushState 的地方,页面像被刷新了一样,油猴脚本倒也重新被加载了,监听也就不用加了。
不过不大明白原理,不知道各位高手能不能给说说。