gpt4 book ai didi

google-chrome-extension - Chrome 扩展程序未在 YouTube 的浏览器导航中加载

转载 作者:行者123 更新时间:2023-12-03 21:45:36 25 4
gpt4 key购买 nike

假设我有一个扩展程序,当您到达 YouTube 视频页面时会加载。我注意到,当您使用 Chrome 按钮来回导航时,该扩展程序很可能不会加载。

例如,我有 2 个文件, list :

{
"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"]
}
]
}

和内容脚本
alert("loaded");

来回导航时,警报并不总是出现。我该如何克服这个问题,以便每次都加载扩展程序?

最佳答案

YouTube 已经开始试用基于 pushState 的导航。通常,此类导航只能通过注入(inject)拦截对 history.replaceState 的调用的代码在内容脚本中检测到。/history.pushState (或通过使用后台页面中的 chrome.webNavigation.onHistoryStateUpdated 事件)。

此答案的其余部分特定于 YouTube。
YouTube 在加载过程中会在页面顶部显示一个(红色)进度条。此进度条使用 CSS 过渡动画。由于转换事件冒泡,您可以将转换事件监听器绑定(bind)到 <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();

注意:此方法取决于插入进度条的事实。每当 Google 决定重命名进度条的 ID 或完全删除进度条时,您的代码将停止工作。

注意 2:这仅适用于事件选项卡。如果您需要在选项卡未聚焦时检测导航更改,则需要绑定(bind) window.onfocuswindow.onblur事件,并检查是否 document.title在这些事件之间发生了变化。

关于google-chrome-extension - Chrome 扩展程序未在 YouTube 的浏览器导航中加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18397962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com