Google chrome extension chrome.webNavigation.onHistoryStateUpdated在重定向时执行多次
当我单击网页上的链接时,脚本会按预期执行一次,但当网页重定向用户时(例如使用Google chrome extension chrome.webNavigation.onHistoryStateUpdated在重定向时执行多次,google-chrome-extension,Google Chrome Extension,当我单击网页上的链接时,脚本会按预期执行一次,但当网页重定向用户时(例如使用history.pushState()脚本会执行两次,如何停止此操作 令人难以置信的是,历史API对重定向和点击链接没有区别,它将它们都报告为transitionType的typelink 默认情况下,executeScript仅在顶部帧(frameId 0)上执行,因此这不是问题所在。 我还使用了回调函数的frameId和parentFrameId属性,尽管我知道它不会解决问题,因为正如我所说,在单击链接时,脚本只执行
history.pushState()
脚本会执行两次,如何停止此操作
令人难以置信的是,历史API对重定向和点击链接没有区别,它将它们都报告为transitionType
的typelink
默认情况下,executeScript
仅在顶部帧(frameId 0)上执行,因此这不是问题所在。
我还使用了回调函数的frameId
和parentFrameId
属性,尽管我知道它不会解决问题,因为正如我所说,在单击链接时,脚本只执行一次,但当浏览器重定向时,它会执行两次
背景脚本:
chrome.webNavigation.onHistoryStateUpdated.addListener(function(obj){
if (obj.frameId === 0 && obj.parentFrameId === -1){
chrome.tabs.executeScript({
file: 'js/contentScript.js',
runAt: 'document_end'
});
console.log(obj.transitionType);
}
});
ContentScript:
console.log("executed!");
onHistoryStateUpdated
事件不仅在浏览器的后退/前进操作上触发,而且在站点脚本使用window.history
方法时也会触发。因此,如果页面多次调用API,每次导航甚至可能发生1000次,这是没有限制的
如果这里的问题是脚本的多次执行,您只需先发送一条消息,然后仅在未收到响应时注入。或者在内容脚本中使用全局变量,请参阅