
简介这是一款面向轻度办公用户的免费开源浏览器插件专门解决微信网页版登录受限的问题支持 Edge、Chrome 等 Chromium 内核浏览器。安装后即可在电脑上直接使用 wx.qq.com 网页版微信免安装客户端、随开随关几乎不占磁盘空间适合只需基础聊天功能的用户。功能上覆盖文字、图片、表情包发送以及截图、文件传输助手、新消息声音提醒、查找联系人与群聊等常用办公操作界面简洁清爽。资源包共 7 个文件以 4 个 png 图标资源、2 个 json 配置文件和 1 个规则集文件为主压缩包仅 22KB解压后将 wechat-need-web v1.1.1 文件夹拖入扩展安装页即可完成部署。目前已有 5638 人学习下载适合希望轻量化使用微信网页端、又不想安装完整客户端的用户参考使用。1. 微信网页版在桌面浏览器里为什么总被拦Wechat-need-web 要解决的真实问题很多人第一次遇到这个场景是在 Edge 或 Chrome 里打开微信网页版页面刚加载出来就提示「请在微信客户端打开链接」或者二维码区域直接空白。换浏览器、清缓存、开无痕折腾一圈还是不行。Wechat-need-web 这个插件方向针对的就是这件事让基于 Chromium 内核的桌面浏览器Edge、Chrome、以及各种 Chromium 套壳在访问微信网页版时表现得像是微信内置浏览器从而绕过页面侧对运行环境的判断。它适合三类人一是需要在电脑上长期挂着微信网页版收发消息、又不想装客户端的二是做前端或自动化需要研究页面在特定 UA 与运行环境下如何分支的三是手里有 Edge、Chrome想用插件方式一次性配置、长期生效的普通用户。核心逻辑不复杂难的是把「改哪些头、改到什么程度、改完为什么还是白屏」这几件事讲清楚。下面按选型、实现、参数、排查一路拆开。2. 拆开「伪装微信内置浏览器」这件事UA、请求头与页面分支2.1 页面到底靠什么判断你是不是微信微信网页版在加载时会做多层环境探测常见的有这几类信号。第一层是 User-Agent微信内置浏览器的 UA 里带有MicroMessenger标识桌面 Chrome 的 UA 里没有这是最容易被识破的一层。第二层是请求头里的Referer和自定义头部分接口会检查来源是否来自微信域。第三层是页面内 JS 的能力探测比如window.navigator.userAgent、window.WeixinJSBridge是否存在、以及一些微信客户端注入的全局对象。Wechat-need-web 这类插件的思路是在请求发出前用声明式规则改写请求头把 UA 换成带MicroMessenger的字符串同时补齐页面依赖的其它头。它不注入微信客户端的原生能力所以对强依赖WeixinJSBridge的功能比如某些支付、分享回调无能为力但对「打开网页版、扫码登录、收发基础消息」这条主线通常够用。理解这个边界很重要否则你会误以为装上插件就万事大吉。2.2 为什么选浏览器插件而不是改系统代理或改 hosts常见做法有三条路改系统级 UA部分浏览器支持启动参数、用代理工具改写请求、装浏览器插件。前两条要么粒度太粗影响所有站点要么配置重、跨平台麻烦。插件方案的优势是作用域可控——只在匹配微信域名的请求上生效Edge 和 Chrome 都能装Chromium 内核通用。这里要区分 Manifest V2 和 V3。V3 用declarativeNetRequest做请求头改写规则是声明式的浏览器层面执行比 V2 的webRequest阻塞式监听更省资源也更符合现在 Chrome、Edge 的扩展规范。Wechat-need-web 方向要落地建议直接按 V3 写避免以后被商店下架或本地加载受限。下面给出一份可直接加载的最小实现。2.3 一份能直接加载的最小插件结构先建目录三个文件即可跑通manifest.json、rules.json、以及一个可选的background.js。{ manifest_version: 3, name: wechat-need-web-min, version: 1.0.0, description: 让 Chromium 内核浏览器以微信内置浏览器身份访问微信网页版, permissions: [ declarativeNetRequest, declarativeNetRequestFeedback ], host_permissions: [ *://*.weixin.qq.com/*, *://*.qq.com/* ], declarative_net_request: { rule_resources: [ { id: wechat_rules, enabled: true, path: rules.json } ] } }manifest_version固定为 3这是当前 Edge、Chrome 都支持且推荐的版本。permissions里declarativeNetRequest是改写请求头的前提declarativeNetRequestFeedback用于调试时在扩展页看到规则命中情况正式发布可以去掉。host_permissions限定作用域只对微信和 QQ 域生效避免污染其它站点。rule_resources指向规则文件enabled: true表示默认启用。[ { id: 1, priority: 1, action: { type: modifyHeaders, requestHeaders: [ { header: user-agent, operation: set, value: Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 MicroMessenger/8.0.40.2420(0x28002837) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 }, { header: referer, operation: set, value: https://wx.qq.com/ } ] }, condition: { urlFilter: ||weixin.qq.com, resourceTypes: [main_frame, sub_frame, xmlhttprequest] } } ]这条规则做了两件事把user-agent设成带MicroMessenger的安卓微信 UA把referer设成微信网页版主域。urlFilter用||weixin.qq.com匹配该域及其子域resourceTypes覆盖主文档、iframe 和 XHR因为登录二维码和消息接口往往走异步请求。priority数值越大优先级越高多条规则冲突时按它裁决。2.4 在 Edge 和 Chrome 里加载并验证打开edge://extensions/或chrome://extensions/右上角开启「开发者模式」点「加载解压缩的扩展」选中刚才的目录。加载成功后扩展卡片上会显示名称和版本。此时访问微信网页版按 F12 打开开发者工具切到 Network刷新页面点任意一个weixin.qq.com的请求看 Request Headers 里的user-agent是否已经变成带MicroMessenger的值。如果没生效先确认规则文件路径和manifest.json里的path一致再确认host_permissions覆盖了目标域。Edge 和 Chrome 对 V3 规则的支持基本一致但 Edge 在部分版本里对declarativeNetRequestFeedback的日志展示位置不同调试时以 Network 面板的实际请求头为准别只信扩展页的提示。3. 把规则做扎实UA 字符串、匹配范围与多浏览器兼容3.1 UA 字符串怎么选才不容易翻车UA 不是随便拼一个带MicroMessenger的字符串就行。微信网页版会解析 UA 里的版本号、平台、NetType等字段字段缺失或格式不对可能触发降级逻辑。常见做法是直接取一段真实微信内置浏览器的 UA保持结构完整。上面示例用的是安卓微信 8.0.40 的形态包含MicroMessenger/8.0.40.2420、WeChat/arm64、NetType/WIFI、Language/zh_CN这些段。如果你在 Windows 桌面环境用安卓 UA 有时会让页面返回移动端布局扫码登录区域变窄。这时可以换成 iOS 微信 UA或者保留桌面平台标识但只把MicroMessenger段插进去。没有万能值建议先用安卓 UA 跑通登录再根据页面布局微调。改完 UA 一定要重新加载扩展规则不会热更新。3.2 匹配范围别把整个 qq.com 都改了host_permissions和urlFilter的范围要克制。微信网页版主域是wx.qq.com和weixin.qq.com登录相关接口可能落在login.wx.qq.com、long.open.weixin.qq.com这类子域。把*://*.qq.com/*全放进来会顺带改写 QQ 邮箱、QQ 空间等无关站点的请求头可能引发登录态异常。更稳的做法是列白名单式的子域匹配。declarativeNetRequest的urlFilter支持||前缀匹配域也支持|精确匹配开头。可以写多条规则分别针对wx.qq.com、weixin.qq.com、login.wx.qq.com而不是一条大范围规则。规则条数在 V3 里有上限静态规则通常几千条量级日常用几十条完全够。3.3 多浏览器兼容Edge、Chrome、Chromium 套壳的差异Edge 和 Chrome 都基于 ChromiumV3 扩展 API 基本一致同一份代码两边都能加载。差异主要在扩展管理页地址edge://extensions/vschrome://extensions/和部分企业策略上。Chromium 套壳浏览器比如一些国产内核浏览器如果内核版本较老可能只支持 V2这时declarativeNetRequest会失效需要退回webRequest方案但 V2 在新版 Chrome 已逐步停用长期看还是以 V3 为主。一个实用技巧把 UA 字符串和匹配域抽成配置放在rules.json里集中管理换浏览器或换 UA 时只改一处。下面是一个用脚本批量生成规则的例子方便你维护多个 UA 变体。import json # 不同平台的微信内置浏览器 UA 模板 UA_TEMPLATES { android: Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 MicroMessenger/8.0.40.2420(0x28002837) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64, ios: Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.40(0x18002832) NetType/WIFI Language/zh_CN, } # 需要改写的目标子域 TARGET_HOSTS [wx.qq.com, weixin.qq.com, login.wx.qq.com] def build_rules(platformandroid): rules [] for idx, host in enumerate(TARGET_HOSTS, start1): rules.append({ id: idx, priority: 1, action: { type: modifyHeaders, requestHeaders: [ {header: user-agent, operation: set, value: UA_TEMPLATES[platform]}, {header: referer, operation: set, value: https://wx.qq.com/}, ], }, condition: { urlFilter: f||{host}, resourceTypes: [main_frame, sub_frame, xmlhttprequest], }, }) return rules if __name__ __main__: with open(rules.json, w, encodingutf-8) as f: json.dump(build_rules(android), f, ensure_asciiFalse, indent2) print(rules.json 已生成)这段脚本把 UA 模板和目标子域分离build_rules按平台生成规则列表id从 1 递增保证唯一。ensure_asciiFalse让中文正常写入indent2方便人工检查。改平台只需传ios改目标域只需动TARGET_HOSTS。生成后覆盖原rules.json回扩展页点「重新加载」即可。3.4 参数速查表参数作用建议值manifest_version扩展规范版本3priority规则优先级1多条冲突时调大urlFilter匹配的 URL 模式resourceTypes生效的请求类型main_frame / sub_frame / xmlhttprequestoperation请求头操作set覆盖或 appendUA 版本段伪装身份与真实微信版本接近别乱编operation用set是覆盖原值用append是追加。UA 一般用set避免出现两个 UA 段。resourceTypes漏掉xmlhttprequest是常见错误会导致页面能打开但接口请求仍被识别。4. 避坑与排查装上了还是白屏、登录失败怎么办4.1 现象扩展已加载页面仍提示「请在微信中打开」原因通常是规则没命中。可能是urlFilter写错、host_permissions没覆盖目标域或者请求类型不在resourceTypes里。解决打开开发者工具 Network找到那个被拦的请求看它的域名和类型对照规则逐项核对。临时把declarativeNetRequestFeedback打开在扩展页看规则命中日志比盲猜快。4.2 现象二维码能出扫码后一直转圈原因多半是登录后的长连接或轮询接口走了别的子域没被规则覆盖。微信登录后会连long.open.weixin.qq.com之类的长连接域。解决在 Network 里按域名过滤把登录后新出现的微信子域补进TARGET_HOSTS重新生成规则并重载扩展。别一次性把所有qq.com加进去按实际出现的域逐个补。4.3 现象Edge 里正常Chrome 里失效原因可能是两个浏览器的扩展没同步加载或者 Chrome 版本较老不支持某些 V3 字段。解决分别在edge://extensions/和chrome://extensions/确认扩展已启用且无报错。如果 Chrome 报规则解析失败检查rules.json是否是合法 JSON多余逗号、中文引号都会导致解析失败。用python -m json.tool rules.json校验一遍最省事。4.4 现象改完 UA 后页面布局错乱、按钮点不到原因是用移动端 UA 触发了移动布局而桌面窗口宽度又不匹配。解决换 iOS UA 试试或者保留桌面 UA 只插入MicroMessenger段。也可以在开发者工具里用设备模拟调宽度找到能正常显示的 UA 与视口组合。这是玄学重灾区多试几组比死磕一组快。4.5 现象更新扩展后规则不生效原因是没有重新加载扩展或者浏览器缓存了旧规则。解决在扩展页点「重新加载」然后强制刷新页面Windows 用 CtrlF5Mac 用 CmdShiftR。如果还不行禁用再启用扩展或者删掉重新加载目录。规则文件改动不会自动热更新这一步不能省。5. 进阶把伪装做成可维护的配置并用最小验证闭环确认走到这里你已经能跑通基本流程。真正拉开差距的是可维护性和验证方法。我一般会把 UA、目标域、请求类型全部抽到一个config.json用脚本生成rules.json这样换微信版本、加子域、切平台都只改配置。下面是一个验证闭环的写法加载扩展后用页面内的fetch打一个已知会被识破的接口对比改头前后的响应。// 在微信网页版页面控制台执行验证请求头是否已被改写 fetch(https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit, { method: POST, credentials: include, }) .then((res) res.json()) .then((data) console.log(接口返回:, data)) .catch((err) console.error(请求失败:, err));这段代码在页面上下文里发起一个带 cookie 的请求如果扩展生效请求头里会带上伪装 UA接口返回正常数据结构如果没生效通常返回错误码或重定向到提示页。注意在控制台执行时要确保当前就在微信域下跨域请求会被浏览器拦截。验证通过后把配置固化成版本管理config.json记录 UA 模板和域列表生成脚本负责产出rules.json扩展目录只放生成物。这样下次微信改版你只需要更新 UA 版本段跑一遍脚本重载扩展三分钟搞定。我踩过最深的坑是早期把 UA 硬编码在规则里微信一升级就得手动翻文件改后来抽成配置才省心。另一个习惯是每次改完先在 Network 面板确认请求头再去看页面表现顺序反了容易把布局问题误判成规则问题。希望帮到你。本文还有配套的精品资源点击获取