如何让Chrome扩展在所有网站始终启用?已尝试代码未生效
解决Chrome扩展在所有网站始终启用的问题
嘿,我来帮你搞定这个问题!你的代码没生效的核心原因是**urlContains: '*'的用法错误**——这里的*会被当作字面意义的星号字符来匹配,也就是说只有网址里实际包含*的页面才会触发规则,这显然不是你想要的“所有网站”效果。
下面给你两种可行的解决方案,按需选择:
方案一:直接在Manifest中配置(最简单)
如果你的需求只是让扩展的页面动作在所有网站显示,完全不需要写JS代码,直接在manifest.json里配置即可:
Manifest V3 示例:
{ "manifest_version": 3, "name": "你的扩展名称", "version": "1.0", "action": { "default_icon": "icon.png", "default_popup": "popup.html" }, "host_permissions": ["<all_urls>"] }
注:Manifest V3中
page_action和browser_action合并成了action,只要声明host_permissions: ["<all_urls>"],扩展就能在所有页面生效。
Manifest V2 示例:
{ "manifest_version": 2, "name": "你的扩展名称", "version": "1.0", "page_action": { "default_icon": "icon.png", "show_matches": ["<all_urls>"] }, "permissions": ["<all_urls>"] }
方案二:使用declarativeContent API(适合复杂逻辑)
如果你确实需要用代码动态控制显示规则,修正后的代码应该这样写:
Manifest V3(Service Worker 中)
// background.js(作为service worker) chrome.runtime.onInstalled.addListener(() => { // 先移除旧规则,避免重复添加 chrome.declarativeContent.onPageChanged.removeRules(undefined, () => { // 添加匹配所有常见协议页面的规则 chrome.declarativeContent.onPageChanged.addRules([{ conditions: [ new chrome.declarativeContent.PageStateMatcher({ pageUrl: { schemes: ["http", "https", "file", "ftp"] } }) ], actions: [new chrome.declarativeContent.ShowAction()] }]); }); });
同时确保manifest.json中声明必要权限:
{ "manifest_version": 3, // ...其他配置 "permissions": ["declarativeContent"], "background": { "service_worker": "background.js" } }
Manifest V2(背景页面中)
// background.js chrome.runtime.onInstalled.addListener(() => { chrome.declarativeContent.onPageChanged.removeRules(undefined, () => { chrome.declarativeContent.onPageChanged.addRules([{ conditions: [ new chrome.declarativeContent.PageStateMatcher({ pageUrl: { schemes: ["http", "https", "file", "ftp"] } }) ], actions: [new chrome.declarativeContent.ShowPageAction()] }]); }); });
Manifest配置:
{ "manifest_version": 2, // ...其他配置 "permissions": ["declarativeContent"], "background": { "scripts": ["background.js"] } }
额外注意事项
- 测试前记得重新加载扩展,并且刷新目标页面;
- 如果扩展需要和页面交互,还要确保声明对应的
host_permissions(V3)或permissions(V2); - 避免重复调用
addRules,最好把规则初始化放在chrome.runtime.onInstalled事件中,只在安装/更新时执行一次。
内容的提问来源于stack exchange,提问作者Abhisek Chaudhuri
相关产品推荐
相关产品推荐

