Edge扩展CSS覆盖失效:无法移除PDF预览的Save/SaveAs按钮
解决Edge扩展CSS无法隐藏PDF查看器Save/SaveAs按钮的问题
问题核心
你遇到的问题是:Edge加载网页或本地PDF时,扩展的content CSS无法覆盖PDF查看器的按钮样式,但手动在控制台添加相同CSS却能生效。这本质是Manifest V3下扩展对内部PDF页面的权限限制,以及content script注入时机/范围的问题。
具体修复方案
方案1:调整Manifest权限与Content Script配置
Manifest V3中,默认不允许content script访问浏览器内部页面(比如PDF查看器),需要补充权限并扩展匹配范围:
修改manifest.json:
{ "name": "CSS Override", "version": "0.0.5", "manifest_version": 3, "description": "Override CSS on any website", "icons": { "16": "icons/favicon.png" }, "action": { "default_icon": { "16": "icons/favicon.png" }, "default_title": "CSS Override", "default_popup": "popup/popup.html" }, "permissions": ["activeTab", "scripting"], // 新增:允许访问所有主机(包括内部页面) "host_permissions": ["<all_urls>"], "content_scripts": [ { // 补充匹配PDF查看器的内部URL格式 "matches": ["<all_urls>", "file:///*", "http://*/*", "https://*/*", "chrome://*/*", "chrome-extension://*/*"], "css": ["css/content.css"], "all_frames": true, // 新增:确保在页面所有资源加载前注入CSS "run_at": "document_start" } ] }
方案2:改用Scripting API动态注入CSS(更可靠)
如果方案1无效,直接用scripting.executeScript在PDF页面主动注入CSS,绕过content script的限制:
- 在popup的JS文件(比如
popup.js)中添加触发逻辑:
// 假设popup.html里有个id为inject-css的按钮 document.getElementById('inject-css').addEventListener('click', async () => { const [tab] = await chrome.tabs.query({ active: true, currentWindow: true }); // 只在PDF页面注入 if (tab.url?.includes('.pdf') || tab.url?.startsWith('chrome://pdf/')) { await chrome.scripting.insertCSS({ target: { tabId: tab.id, allFrames: true }, css: `button#save, button#saveAs { display: none !important; cursor: not-allowed; pointer-events: none; }` }); alert('CSS已注入'); } });
- 确保
manifest.json中的scripting权限已开启,且host_permissions包含<all_urls>。
额外验证点
- 检查PDF查看器中按钮的实际选择器:有时Edge的PDF按钮id可能不是
save/saveAs,右键按钮→检查元素,确认准确的选择器(比如实际是#save-button或带其他前缀的id)。 - 修改配置后,在Edge扩展管理页面点击「重新加载」,确保新配置生效。
内容的提问来源于stack exchange,提问作者gmmethekeys
相关产品推荐
相关产品推荐

