typescript Chrome扩展清单版本3自定义用户代理未设置

kmpatx3s  于 2023-05-08  发布在  TypeScript
关注(0)|答案(1)|浏览(166)

我们有一个只有2个文件的扩展名:manifest.json和background.js
浏览器(chrome版本112)没有报告任何错误,但用户代理没有设置为my-custom-user-agent。下面是完整的扩展代码:
manifest.json

{
    "name": "ua-customizer",
    "version": "1",
    "manifest_version": 3,
    "permissions": [
      "declarativeNetRequest"
    ],
    "host_permissions": [
      "<all_urls>"
    ], 
    "background": {
      "service_worker": "background.js"
    }
  }

background.js

const rules = {
  removeRuleIds: [1],
  addRules: [
    {
      id: 1,
      priority: 1,
      action: {
        type: 'modifyHeaders',
        requestHeaders: [
          {
            header: 'user-agent',
            operation: 'set',
            value: `my-custom-user-agent`,
          },
        ],
      },
      condition: {
        urlFilter: '<all_urls>'
      },
    },
  ],
}
chrome.declarativeNetRequest.updateDynamicRules(rules);

少了什么?

t9aqgxwy

t9aqgxwy1#

变更:

  • urlFilter: '<all_urls>'替换为urlFilter: '*',因为<all_urls>urlFilter中不支持urlFilter: '<all_urls>'。查看chrome.declarativeNetRequest > RuleCondition > urlFilter
  • resourceTypes: [ 'main_frame' ]添加到RuleCondition。也许您需要添加其他资源类型,具体取决于您使用扩展的网站。但是对于https://www.whatismybrowser.com/detect/what-is-my-user-agent/来说,“main_frame”就足够了

更改代码:

condition: {
    resourceTypes: [ 'main_frame' ],
    urlFilter: '*'
},

这两个变化都是必要的。
如果只进行其中一项更改,则扩展将不会修改用户代理字符串。
chrome.declarativeNetRequest.updateDynamicRules(rules);只需要执行一次。
参见chrome.declarativeNetRequest > updateDynamicRules:“这些规则在浏览器会话和扩展更新之间保持不变。”
我建议把它放在chrome.runtime.onInstalled处理程序中:

chrome.runtime.onInstalled.addListener(function(details) {
    chrome.declarativeNetRequest.updateDynamicRules(rules);
});

相关问题