You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修改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

火山引擎 最新活动