比方说,我已经当你在YouTube视频page.I到达加载的扩展已经注意到,当一个导航来回使用镀铬按钮,扩展很可能将不会加载。
举个例子,我有2个文件,清单:
{
"name": "back forth",
"version": "0.1",
"manifest_version": 2,
"description": "back forth",
"permissions": ["storage", "*://www.youtube.com/watch*"],
"content_scripts": [
{
"matches": ["*://www.youtube.com/watch*"],
"js": ["contentscript.js"]
}
]
}
和contentscript
alert("loaded");
警报浏览时来回并不总是露面。 我怎样才能解决这个问题,这样分机加载每一次?
YouTube已经开始使用基于pushState的导航试用。 通常,这样的导航只能内容脚本中通过注入该拦截到的呼叫代码检测history.replaceState
/ history.pushState
(或通过使用chrome.webNavigation.onHistoryStateUpdated
在后台页面事件)。
在这个答案的其余部分是具体到YouTube。
YouTube的显示(红色)进展页面顶部加载过程中吧。 该进度条是使用CSS动画过渡。 由于转变事件气泡,可以绑定一个过渡事件监听器<body>
并且在这些情况下,检查导航。
您必须在您插入内容脚本*://www.youtube.com/*
而不是*://www.youtube.com/watch*
,因为pushState的可用于从导航/
到/watch..
。
function afterNavigate() {
if ('/watch' === location.pathname) {
alert('Watch page!');
}
}
(document.body || document.documentElement).addEventListener('transitionend',
function(/*TransitionEvent*/ event) {
if (event.propertyName === 'width' && event.target.id === 'progress') {
afterNavigate();
}
}, true);
// After page load
afterNavigate();
注意:此方法取决于进度栏插入的事实。 当谷歌决定干脆改名进度条的ID,或删除的进度条,你的代码将停止工作。
注2:这仅适用于主动标签。 如果您需要检测导航的变化,而标签不集中,那么你就需要绑定一个window.onfocus
和window.onblur
事件,并检查是否document.title
有这些事件之间改变。