如何修改Vivaldi浏览器User-agent请求头的部分内容而非完全替换
如何修改Vivaldi浏览器User-agent请求头的部分内容而非完全替换
我完全懂你这种痛点——手动维护完整的User-agent字符串简直是噩梦,版本号一更新就得跟着改,还容易显得假兮兮的。想要只替换当前UA里的特定内容(比如把"Windows"换成"Linux"),其实是有靠谱办法的,不用再纠结找什么UA数据源或者手动改快捷方式参数。
推荐方法:用用户脚本动态修改UA
Vivaldi支持用户脚本,你可以用Tampermonkey这类脚本管理器(也可以直接用Vivaldi内置的用户脚本功能),写一段简单的脚本就能实现动态替换UA的部分内容:
// ==UserScript== // @name Vivaldi UA Partial Replace // @namespace http://tampermonkey.net/ // @version 0.1 // @description Replace "Windows" with "Linux" in Vivaldi's User-Agent // @author You // @match *://*/* // @grant none // ==/UserScript== (function() { 'use strict'; // 获取浏览器原生的User-Agent const originalUA = navigator.userAgent; // 替换指定内容 const modifiedUA = originalUA.replace(/Windows/g, "Linux"); // 重写页面内的navigator.userAgent,避免网页通过JS检测出原始UA Object.defineProperty(navigator, 'userAgent', { get: function() { return modifiedUA; } }); // 拦截XMLHttpRequest请求,修改请求头里的UA const originalOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function(method, url, async, user, password) { originalOpen.call(this, method, url, async, user, password); this.setRequestHeader('User-Agent', modifiedUA); }; // 拦截fetch请求,修改请求头里的UA const originalFetch = fetch; window.fetch = function(resource, options) { options = options || {}; options.headers = options.headers || {}; options.headers['User-Agent'] = modifiedUA; return originalFetch(resource, options); }; })();
这段脚本会自动获取Vivaldi当前的最新UA,把里面所有的"Windows"替换成"Linux",同时覆盖页面JS检测和HTTP请求的UA头。这样一来,浏览器本身的UA更新时,脚本会自动跟着用新的版本号,完全不用你手动维护,完美解决了UA过时的问题。
关于你提到的UA数据源问题
之前你找可靠UA数据源碰壁的麻烦,用上面的方法就彻底解决了——脚本直接复用浏览器原生的UA,所有版本标识、其他参数都会自动跟着Vivaldi的更新而同步,根本不用再费心找什么第三方网站获取UA了。
备注:内容来源于stack exchange,提问作者Stan




