Edge Manifest V3扩展:如何在新标签页伪装移动端必应搜索?
解决方案:Edge扩展Manifest V3实现必应移动端搜索伪装
问题分析
你的代码存在几个Manifest V3特有的问题:
webRequest的blocking模式只能在Service Worker中运行,无法在普通页面脚本/弹窗脚本里调用- 修改User-Agent这类受保护的请求头,需要额外声明
extraHeaders权限 - URL匹配范围太广,且未确保监听器在页面请求前就完成注册
步骤1:更新manifest.json权限
先在manifest.json中添加必要权限,确保扩展能拦截并修改必应的请求头:
{ "manifest_version": 3, "name": "Bing Mobile Spoofer", "version": "1.0", "permissions": ["webRequest", "webRequestBlocking"], "host_permissions": ["https://www.bing.com/*"], "background": { "service_worker": "background.js" }, "action": { "default_popup": "popup.html" } }
步骤2:将UA伪装逻辑移到Service Worker(background.js)
创建background.js,把UA修改逻辑放在这里——Manifest V3中只有Service Worker能使用blocking模式的webRequest:
// background.js chrome.webRequest.onBeforeSendHeaders.addListener( (details) => { // 移除原有UA头 const headerIndex = details.requestHeaders.findIndex(h => h.name.toLowerCase() === 'user-agent'); if (headerIndex !== -1) { details.requestHeaders.splice(headerIndex, 1); } // 添加移动端UA details.requestHeaders.push({ name: 'User-Agent', value: 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Mobile Safari/537.36' }); return { requestHeaders: details.requestHeaders }; }, { urls: ["https://www.bing.com/search*"] }, // 精准匹配必应搜索请求 ["blocking", "requestHeaders", "extraHeaders"] // 必须添加extraHeaders才能修改UA );
步骤3:修改搜索执行函数
确保搜索函数在扩展上下文(比如弹窗脚本)中运行,无需再调用spoof()函数(逻辑已在Service Worker自动生效):
// popup.js(假设你的搜索函数在弹窗里) function executeSearchM(searches) { for (const searchQuery of searches) { // 编码搜索关键词,避免特殊字符破坏URL const encodedQuery = encodeURIComponent(searchQuery); window.open(`https://www.bing.com/search?q=${encodedQuery}`, '_blank'); } }
关键注意事项
- Service Worker生命周期:确保Service Worker处于激活状态,扩展加载后不要立即关闭触发搜索的弹窗,或可添加监听逻辑保持其活跃
- UA有效性:如果当前UA失效,可打开浏览器开发者工具的移动端模式,复制最新的移动端UA字符串替换
- 关键词编码:必须用
encodeURIComponent处理搜索关键词,避免空格、特殊字符导致URL错误
内容的提问来源于stack exchange,提问作者RoN
相关产品推荐
相关产品推荐

