首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >chrome.webNavigation.onHistoryStateUpdated在重定向上执行多次

chrome.webNavigation.onHistoryStateUpdated在重定向上执行多次
EN

Stack Overflow用户
提问于 2020-02-06 18:22:20
回答 1查看 165关注 0票数 0

当我单击网页上的链接时,脚本会执行一次,不出所料,但当网页重定向用户时(如使用history.pushState() ),脚本会执行两次,我如何停止此操作?

令人难以置信的是,历史API并没有区分重定向和点击链接,它将它们都报告为transitionType类型的link

默认情况下,executeScript仅在顶部帧(frameId 0)上执行,因此这不是问题所在。我还使用了回调函数的frameIdparentFrameId属性,尽管我知道这不会解决问题,因为正如我所说的,在单击链接时,脚本只执行一次,但当浏览器重定向时,它会执行两次。

BackgroundScript:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
console.log("executed!");
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-06 18:38:02

onHistoryStateUpdated事件不仅在浏览器的后退/前进操作中触发,而且当站点脚本使用window.history方法时也会触发,因此它可能在每次导航中发生1000次,如果页面调用那么多次,则没有限制。

如果这里的问题是脚本的多次执行,您可以简单地先发送一条消息,然后只在没有收到响应的情况下才进行注入。或者在内容脚本中使用全局变量,请参见how to avoid dynamically injecting the same script multiple times when using chrome.tabs.executeScript

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60092692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档