Firefox扩展调用browser.cookies.getAll()返回空数组排查咨询
我开发了如下Firefox扩展,想要获取浏览器中的Cookies。但点击扩展中的“All”按钮时,console.log(await browser.cookies.getAll({}))仅打印长度为0的数组。对比过类似项目但未发现问题差异,请问该如何排查?
manifest.json
{ "manifest_version": 2, "name": "DefaultPopup", "version": "1.0", "permissions": [ "downloads" , "cookies" ], "browser_action": { "default_popup": "popup/choose_option.html" }, "background": { "scripts": ["background.js"] }, "content_scripts": [ { "matches": ["*://*/*"], "js": ["runtime.js"] } ] }
background.js
browser.runtime.onInstalled.addListener(function(details) { console.log('onInstalled'); console.log(details); }); browser.runtime.onMessage.addListener(async function(details) { console.log('onMessage'); console.log(details); console.log( await browser.cookies.getAll({}) ); });
runtime.js
console.log(browser) /* console.log(browser.downloads) console.log(browser.runtime) console.log(browser.runtime.id) */
popup/choose_option.html
<!DOCTYPE html> <html> <body> <button class="all">All </button> <script src="choose_option.js"></script> </body> </html>
popup/choose_option.js
document.querySelector(".all").addEventListener("click", () => { console.log('click') browser.runtime.sendMessage("my message"); window.close(); });
排查步骤:
补全权限范围:Manifest V2中,
cookies权限需要搭配主机权限才能获取对应站点的Cookie。修改permissions数组,添加<all_urls>以获取所有站点的Cookie:"permissions": [ "downloads", "cookies", "<all_urls>" ]无主机权限时,
cookies.getAll()无法返回任何Cookie,这是最常见的原因。验证消息接收与上下文:确认后台脚本正确接收了popup发送的消息——检查后台控制台是否打印了
onMessage和my message。确保cookies.getAll()是在后台脚本中执行,而非popup或content script(你当前的代码是正确的,但需确认执行上下文)。针对性测试Cookie获取:尝试指定一个明确有Cookie的站点进行测试,比如:
await browser.cookies.getAll({url: "https://www.example.com"})如果能返回该站点的Cookie,说明是权限范围问题;如果仍然为空,再排查浏览器设置。
检查浏览器隐私配置:
- 确保扩展在非隐私窗口中运行,隐私窗口的Cookie是隔离的,默认扩展无法访问。
- 检查浏览器是否开启了“退出时清除Cookie”或类似隐私设置,这类设置会导致无持久Cookie可获取。
确认API兼容性:虽然Firefox支持Manifest V2,但部分API行为可能因版本变化调整。可以查看当前Firefox版本对
browser.cookies.getAll的支持文档,确认无参数调用的预期行为。
内容的提问来源于stack exchange,提问作者user1424739

