javascript - Chrome 扩展 - 从 list v2 迁移到 v3

标签 javascript google-chrome google-chrome-extension manifest

我需要将一些 chrome 扩展迁移到 list v3。我有一个扩展,它使用后台脚本来拦截一些 ajax 请求以获取相关视频文件。我已经开始修改 list 文件,但我不确定如何处理 list background部分,它是相对的 JavaScript 文件。
目前我已经以这种方式修改了 list :

{
  "manifest_version": 3,
  "name": "__MSG_extName__",
  "description": "__MSG_extDescription__",
  "default_locale": "en",
  "permissions": [
    "tabs",
    "activeTab",
    "webRequest"
  ],
  "host_permissions": [
    "https://*"
  ],
  "icons": {
    "16": "icons/16.png",
    "48": "icons/48.png",
    "128": "icons/128.png"
  },
  "background": {
    "scripts": [
      "js/background.js"
    ],
    "persistent": true
  },
  "web_accessible_resources": [{
    "resources": ["room.html"]
  }],
  "action": {},
  "version": "2.1.0",
  "content_security_policy": {
    "extension_pages": "script-src 'self' ; object-src 'self'"
  }
}
如果我知道我需要删除 persistent,我不清楚如何修改背景部分并替换 scriptsservice_workers那是一个字符串,对吗?
对于background.js文件内容,而不是我不知道它是否会按原样工作,或者我是否需要注册服务人员?
//
let payload = {}

chrome.runtime.onInstalled.addListener(function() {
  chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
    chrome.declarativeContent.onPageChanged.addRules([
      {
        conditions: [
          new chrome.declarativeContent.PageStateMatcher({
            pageUrl: { urlMatches: 'www.mywebsite.com/video/*', schemes: ["https"] },
          })
        ],
        actions: [ new chrome.declarativeContent.ShowPageAction() ]
      }
    ]);
  });
});

//
chrome.runtime.onInstalled.addListener( () => {
  chrome.tabs.create({
    url: browser.runtime.getURL('instructions.html')
  })
})

//
chrome.runtime.onUpdateAvailable.addListener( () => {
  chrome.runtime.reload()
})

//
chrome.pageAction.onClicked.addListener( () => {
  chrome.windows.create({
    url: browser.runtime.getURL('popup.html'),
    width: 500,
    height: 295,
    type: 'popup'
  })
})

//
chrome.webRequest.onCompleted.addListener( (details) => {
  payload.url = details.url
},{
  urls: ["https://*.akamaihd.net/*/index_0_av.m3u8*"],
  types: ["xmlhttprequest"]
},["responseHeaders"])

chrome.webRequest.onCompleted.addListener( (details) => {
  payload.streamInfo = details.url
},{
  urls: ["https://*.mywebsite.com/video/*/*.json*"],
  types: ["xmlhttprequest"]
},["responseHeaders"])

// 
chrome.runtime.onMessage.addListener( (message) => {
  console.log(message)
  if( message.action === 'openPopup' ){
    chrome.windows.create({
      url: browser.runtime.getURL('popup.html'),
      width: 500,
      height: 295,
      type: 'popup'
    })
  }
  if( message.status === 'ready' ){
    chrome.runtime.sendMessage( payload )
  }
  else if( message.status === 'refresh' ){
    chrome.runtime.sendMessage( payload )
  }
})
任何人都可以帮助我吗?

最佳答案

无需显式注册任何内容。
您只需在 manifest.json 中正确声明脚本即可。

  • 如果您希望扩展在 Chrome 92 或更早版本中运行,请将后台服务 worker 脚本移动到扩展根目录中。这是您的 manifest.json 所在的位置。
  • 只指定一个后台服务 worker 脚本 在 manifest.json 中:
    "background": {
      "service_worker": "background.js"
    }
    
    这个文件可以使用同步内置的importScripts加载里面的其他文件.
  • 重新编写代码,使其不使用全局变量 喜欢 payload通过切换到 chrome.storage.local .它仅支持与 JSON 兼容的类型(字符串、数字、 bool 值、null 和仅由这些类型递归组成的数组/对象),因此如果您的数据无法序列化,您将不得不 force the service worker to persist .
  • 关于javascript - Chrome 扩展 - 从 list v2 迁移到 v3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65311898/

    相关文章:

    javascript - Jquery从创建元素中删除 ' '

    javascript - Twig 和javascript

    javascript - 通过javascript计算具有默认值属性的输入字段的总和

    eclipse - 从 Eclipse 中在 chrome 中打开 html 文档

    javascript - 如何添加一个按钮来启用后台脚本?

    javascript - 如何通过 JavaScript 访问 HTTP 请求 header 字段?

    javascript - 通过 Ext.data.connection Sencha Touch 和 Phonegap 在互联网可用时加载谷歌地图 API

    javascript - 如何保存从服务器下载的视频?

    javascript - 在我的内容脚本中调用 JS 库 - WebExtension

    google-chrome - testcafe 是否支持加载任何 crx 扩展,并使用 chrome 浏览器中的自定义 header 值设置 ModHeader 扩展