javascript - 用于拦截/修改 websockets UA 的 Chrome 扩展 API

标签 javascript google-chrome google-chrome-extension websocket user-agent

我正在尝试编写一个扩展程序,该扩展程序将针对来自 Chrome 的所有传出请求修改用户代理。

对于 http://、https://、ftp://、file://或 chrome-extension://我可以使用 chrome.webRequest APIonBeforeSendHeaders。但是,这不适用于 ws://或 wss://。

是否有其他一些 API 允许我设置/修改这些请求的 header ?

最佳答案

我在谷歌上搜索这个问题的答案,现在,三年后,这是可能的,我会在这里记录下来。

根据 https://developer.chrome.com/extensions/webRequest ,它应该可以在 Chrome 58 上运行。但是需要进行多种配置才能使其运行。

  • 在 list 中必须为 webRequest 和 webRequestBlocking 请求权限
  • 还必须请求 Web 套接字 URL 的权限,例如“wss://*/”和“ws://*/”
  • 在请求过滤器中(在 addListener 函数调用中),必须使用 wss 或 ws 方案声明 url。使用 * 作为方案仅解析为 http 和 https
  • 在请求过滤器中,必须在类型中声明 websocket。 (我不确定这是否是必需的,我没有时间验证)

请记住,webRequest 仅在后台脚本中可用,在内容脚本中不可用。

示例(更改 Origin header ,更改 User Agent 应该类似)

在 manifest.json 中:

"permissions": [
"storage",
"tabs",
"activeTab",
"webRequest",
"webRequestBlocking",
"webNavigation",
"debugger",
"https://*/",
"wss://*/"
],

在后台脚本中

// origin is defined somewhere above
chrome.webRequest.onBeforeSendHeaders.addListener((details) => {
      if (origin) {
        const headers = details.requestHeaders;
        for (let i = 0; i < headers.length; i++) {
          if (headers[i].name === 'Origin') {
            headers[i].value = origin;
          }
        }
        return { requestHeaders: headers };
      }
    }, { urls: ['wss://server.example.com/*', 'https://server.example.com/*'],
         types: ['xmlhttprequest', 'websocket'] },
       ['requestHeaders', 'blocking']);

关于javascript - 用于拦截/修改 websockets UA 的 Chrome 扩展 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30123893/

相关文章:

JavaScript 增量器

google-chrome - Chrome 在非 ssl heroku web 应用程序上强制使用 ssl

javascript - 如何使用 Puppeteer 或 Chrome 控制台以编程方式切换 JS 上下文(到不同域的 iframe 上下文)

javascript - 开始范围以插入 Div

javascript - 如何编辑特定 URL 的文档值? ( Chrome )

javascript - 向 GMaps 添加标记(谷歌地图)

javascript - 是否可以用另一个 td 元素替换 HTML 表格 td 元素

css - 在 Chrome 上转换字母间距

html - 响应式 Chrome 扩展弹出窗口

JavaScript OR (||) 变量赋值说明