将自定义用户代理关联到特定的谷歌浏览器页面/标签页

Associate a custom user agent to a specific Google Chrome page/tab

本文关键字:谷歌浏览器 标签 用户代理 自定义 关联      更新时间:2023-09-26

我正在开发一个谷歌浏览器扩展程序,我想为标签页/页面或弹出窗口(iframe显示为"气泡弹出窗口")设置特定的用户代理,而不会影响其他页面或标签页。

可能吗?

webRequest API 可用于修改用户代理标头。
注意:开发者工具中的"网络"选项卡显示标题。我已经使用 netcat ( nc -l 127.0.0.1 -p 6789 ) 验证了标头设置是否正确。

在下面的示例中,代码在所有选项卡上激活。调整请求筛选器以满足您的要求。添加tabId以限制此筛选器的功能,以及选项卡的 tabId(可通过各种 API 获取,特别是chrome.tabs)。

background.js

chrome.webRequest.onBeforeSendHeaders.addListener(
    function(info) {
        // Replace the User-Agent header
        var headers = info.requestHeaders;
        headers.forEach(function(header, i) {
            if (header.name.toLowerCase() == 'user-agent') { 
                header.value = 'Spoofed UA';
            }
        });  
        return {requestHeaders: headers};
    },
    // Request filter
    {
        // Modify the headers for these pages
        urls: [
            "http://stackoverflow.com/*",
            "http://127.0.0.1:6789/*"
        ],
        // In the main window and frames
        types: ["main_frame", "sub_frame"]
    },
    ["blocking", "requestHeaders"]
);

manifest.json

{
  "name": "WebRequest UA test",
  "version": "1.0",
  "permissions": ["webRequest", "webRequestBlocking", "http://*/*"],
  "background": {
    "scripts": ["background.js"]
  },
  "manifest_version": 2
}

文档

  • chrome.webRequest.onbeforeSendHeaders事件
  • 请求筛选器