Chrome扩展开发需求:特定网页触发新标签页并设置Cookie限制
Chrome 扩展实现方案
1. 基础配置与权限
- 在
manifest.json中声明必需权限:tabs(操作标签页)、cookies(读写Cookie)、activeTab,同时通过matches指定监听的网站范围(若需兼容所有域名,用<all_urls>后续再做域名过滤更灵活)。 - 定义多组URL映射规则:直接写在扩展的
config.js配置文件中,示例:
进阶版可做popup页面让用户自定义规则,基础版写死配置即可满足需求。const URL_MAPPINGS = { "booking.com": "https://airbnb.com", "google.com": "https://bing.com", "yahoo.com": "https://duckduckgo.com" };
2. 页面加载监听逻辑
- 使用
chrome.tabs.onUpdated事件监听标签页状态,当页面加载完成(status === 'complete')时,提取当前标签的域名:new URL(tab.url).hostname。 - 校验该域名是否存在于
URL_MAPPINGS的键集合中,匹配成功则进入下一步判断。
3. Cookie防重复触发机制
- 匹配到目标域名后,调用
chrome.cookies.get查询是否存在名为autoJump_${domain}的Cookie:chrome.cookies.get({url: tab.url, name: `autoJump_${domain}`}, (cookie) => { // 后续逻辑处理 }); - 若Cookie不存在:调用
chrome.tabs.create({url: URL_MAPPINGS[domain]})打开新标签,同时设置有效期为X天的Cookie:const expireTime = Date.now() / 1000 + X * 24 * 60 * 60; // 转换为Chrome要求的秒级时间戳 chrome.cookies.set({ url: tab.url, name: `autoJump_${domain}`, value: "1", expirationDate: expireTime, sameSite: "strict" }); - 若Cookie已存在,直接跳过跳转逻辑。
4. 细节优化
- 处理子域名匹配:比如
www.booking.com也要触发跳转,可使用hostname.endsWith('booking.com')或正则匹配,避免漏触发。 - 防止无限循环:若映射的目标URL也在触发列表中,需增加判断(检查目标域名是否在
URL_MAPPINGS的键中),避免打开新标签后再次触发跳转。 - 可选功能:新增popup页面,支持用户修改映射规则、调整Cookie有效期,或手动清除指定域名的防重复Cookie。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

