You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome扩展:无需特定权限修改User Agent的方法咨询

无需额外权限的User Agent修改方案(Manifest V2)

你可以通过内容脚本劫持navigator.userAgent属性的方式实现需求,完全不需要添加webRequestBlocking或declarativeNetRequestWithHostAccess权限,具体步骤如下:

核心思路

利用activeTab临时权限(安装时不向用户申请,仅在用户触发弹窗操作时获取),向目标标签页注入脚本,通过Object.defineProperty劫持浏览器UA相关属性,覆盖页面环境中的UA检测逻辑。

步骤1:弹窗触发UA修改逻辑

在扩展弹窗中添加操作按钮,点击时获取当前激活标签页,注入UA劫持脚本:

// popup.js 代码
document.getElementById('set-custom-ua').addEventListener('click', async () => {
  // 获取当前激活标签页
  const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });
  // 自定义UA字符串
  const targetUA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36";
  
  // 注入UA劫持脚本
  await chrome.tabs.executeScript(activeTab.id, {
    code: `
      // 劫持核心UA属性
      Object.defineProperty(navigator, 'userAgent', {
        get: () => "${targetUA}",
        configurable: true
      });
      // 补充劫持其他可能暴露UA的属性
      Object.defineProperty(navigator, 'appVersion', {
        get: () => "${targetUA}",
        configurable: true
      });
      Object.defineProperty(navigator, 'platform', {
        get: () => "Win32",
        configurable: true
      });
    `
  });
  
  // 刷新标签页使修改生效
  chrome.tabs.reload(activeTab.id);
});

步骤2:配置Manifest权限

确保manifest中包含activeTab权限(无需额外敏感权限):

// manifest.json 片段
{
  "permissions": ["activeTab"],
  "browser_action": {
    "default_popup": "popup.html"
  }
}

进阶:持久化UA修改

如果需要让UA修改在页面导航时保持生效,可以添加持久化内容脚本,从扩展存储读取配置并自动劫持:

  1. 添加内容脚本配置:
// manifest.json 补充
{
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "run_at": "document_start",
      "js": ["ua-hook.js"]
    }
  ],
  "permissions": ["storage", "activeTab"]
}
  1. 编写ua-hook.js脚本:
// 从扩展存储读取UA配置
chrome.storage.local.get(['customUA', 'enableUA'], (res) => {
  if (res.enableUA && res.customUA) {
    // 劫持UA属性
    Object.defineProperty(navigator, 'userAgent', {
      get: () => res.customUA,
      configurable: true
    });
    // 同步其他相关属性
    Object.defineProperty(navigator, 'appVersion', {
      get: () => res.customUA,
      configurable: true
    });
  }
});
  1. 弹窗中只需负责修改存储配置:
// popup.js 中修改配置的逻辑
document.getElementById('save-ua').addEventListener('click', () => {
  const inputUA = document.getElementById('ua-input').value;
  chrome.storage.local.set({
    customUA: inputUA,
    enableUA: true
  }, () => {
    // 刷新当前标签页生效
    chrome.tabs.query({active: true, currentWindow: true}, ([tab]) => {
      chrome.tabs.reload(tab.id);
    });
  });
});

注意事项

  • 该方案仅覆盖页面环境中的UA检测,如果网站通过XMLHttpRequest/fetch发送的请求头检测UA,此方法无法修改请求头中的UA(若需要覆盖这类场景,才不得不使用webRequestBlocking)。
  • activeTab权限是临时的,用户关闭弹窗后权限自动失效,但UA劫持逻辑会保留到标签页刷新或关闭。

内容的提问来源于stack exchange,提问作者Ugur Kellecioglu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:32:42