我正在尝试编写我的第一个Chrome扩展程序,但我无法正确加载内容脚本。我希望它只加载You Tube的主页(即https://www.youtube.com/);但是,我不希望它加载任何其他页面,例如,在用户搜索后(即https://www.youtube.com/results?search_query=programming)。这就是我所拥有的:
"content_scripts": [
{
"matches": ["*://*.youtube.com/*"],
"exclude_matches": ["*://*.youtube.com/"],
"js": ["jquery.js", "content.js"]
}
使用上面的代码,content.js根本不加载;但是,如果我取出" exclude_matches",则会在https://www.youtube.com/上加载内容脚本。
答案 0 :(得分:1)
目前,您的清单包含所有 youtube网页,但主页。
以下内容仅包括主页:
"content_scripts": [
{
"matches": ["*://www.youtube.com/"],
"js": ["jquery.js", "content.js"]
}
]
然而,Youtube使用历史API导航,这意味着如果用户首先打开视频页面然后导航到主页面,您的内容脚本将无法自动注入。您需要将chrome.webNavigation.onHistoryStateUpdated事件处理程序与url filters一起使用:
chrome.webNavigation.onHistoryStateUpdated.addListener(
function(details) {
var tabId = details.tabId;
chrome.tabs.executeScript(tabId, {file: "jquery.js", runAt: "document_start"}, function() {
chrome.tabs.executeScript(tabId, {file: "content.js", runAt: "document_start"});
});
},
{
url: [
{urlEquals: "https://www.youtube.com/"}
]
}
);
当用户从主页面导航时,您可能需要一个处理程序来消除内容脚本的影响。这可以在内容脚本中实现为pagehide侦听器,也可以使用(另一个)onHistoryStateUpdated
侦听器实现。
或者,您可以在所有youtube上安装脚本,然后检查当前网址是否属于内容脚本中的主页。如果脚本注入onHistoryStateUpdated
发生得太晚,并且您看到导航和后续应用内容脚本之间存在延迟,这可能很有用。