我可以检测history.pushState
来自 chrome 用户脚本(而不是扩展名)的 url 更改,而无需轮询(或打破脚本的孤立世界以拦截网页的 javascript 上下文中的调用)吗?
我的问题,更详细:
由于Github通过pjax [最小化示例]使用history.pushState
[ WHAT-WG 规范]进行站点内页面到页面站点导航,而不是在您浏览站点时重新加载整个页面,用户脚本针对站点上的特定 url只有当您在该网址进入网站或手动强制重新加载页面时才会触发。
我正在为 DRY 编写一个on.js的小用户脚本库:整理用户脚本,通过拦截调用来为他们处理这类事情,pushState
以查看我们何时在主机脚本想要运行的新页面上并仅调用它相关的。
如果在调用时触发事件,这将相对容易history.pushState
,但据我所知,popstate
除非第一页加载或用户触发历史记录的后退/前进移动,否则不会触发任何事件,这对我的目的来说毫无用处。
我也探索过将其限制为仅 pjax/github 的解决方案——当一个新页面加载时,github 会触发一个$(document).trigger('pageUpdate')
事件,但是由于在jQuery
内部而不是通过 DOM 事件实现这些,我听不到来自我的用户脚本运行的孤立世界的那些在,除非我在页面本身中注入一个小监听器,让它的jQuery
实例向我报告这个事件,然后我还不如劫持页面history.pushState
本身。
有没有人看到其他整洁的方法来实现这一目标?