Chrome Manifest 3中使用cookies.set报错:无对应URL主机权限
核心问题
直接用相对路径"config.html"作为chrome.cookies.set的url参数是错误的——Chrome的cookies API要求这个参数必须是带完整协议的绝对URL,扩展内页面的专属协议是chrome-extension://,后面需跟上你的扩展ID和文件路径。
正确解决方案
使用Chrome扩展提供的chrome.runtime.getURL()方法,自动生成扩展内文件的完整合法URL,无需手动拼接扩展ID。
修改后的代码
// 注意:chrome.cookies API是异步的,需用async/await或回调处理结果 async function create_cookie(obj=null) { var json_array = obj ? obj : [{requester: false},{title:false},{none:true}]; const details = { // 生成扩展内config.html的完整URL url: chrome.runtime.getURL("config.html"), name: "Auto_Select_0519669", value: JSON.stringify(json_array), expirationDate: Number.MAX_SAFE_INTEGER }; try { await chrome.cookies.set(details); console.log("Cookie创建成功"); // 获取Cookie也要用异步方式 const data = await chrome.cookies.get({ url: chrome.runtime.getURL("config.html"), name: "Auto_Select_0519669" }); console.log(data); } catch (err) { console.error("操作Cookie失败:", err); } } create_cookie();
额外说明
- 你的Manifest配置没问题,
host_permissions里的<all_urls>已经覆盖了包括扩展自身URL在内的所有地址权限,无需额外修改。 chrome.cookies的所有方法都是异步API,原代码同步调用chrome.cookies.get会直接返回undefined,必须用异步方式处理结果。
内容的提问来源于stack exchange,提问作者Wt Riker
相关产品推荐
相关产品推荐

