new*_*dev 6 javascript google-chrome manifest google-chrome-extension
我需要将一些 chrome 扩展迁移到清单 v3。我有一个扩展,它使用后台脚本来拦截一些ajax 请求以获取相关视频文件。我已经开始修改清单文件,但我不确定如何继续处理清单background部分及其相关的 JavaScript 文件。
目前我已经通过以下方式修改了清单:
{
"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'"
}
}
Run Code Online (Sandbox Code Playgroud)
persistent如果我知道我需要删除并替换scripts为service_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 )
}
})
Run Code Online (Sandbox Code Playgroud)
有人可以帮我吗?
无需显式注册任何内容。
您所需要做的就是在manifest.json 中正确声明脚本。
如果您希望扩展程序在 Chrome 92 或更早版本中运行,请将后台服务工作线程脚本移至扩展程序根目录中。这是您的manifest.json 所在的位置。
在manifest.json中仅指定一个后台服务工作线程脚本:
"background": {
"service_worker": "background.js"
}
Run Code Online (Sandbox Code Playgroud)
该文件可以使用同步内置的importScripts加载内部的其他文件。
重新编写您的代码,使其不使用全局变量,例如payload切换到chrome.storage.local. 它仅支持 JSON 兼容类型(字符串、数字、布尔值、null 以及仅由这些类型递归组成的数组/对象),因此如果您的数据无法序列化,您将不得不强制服务工作人员持久保存。
| 归档时间: |
|
| 查看次数: |
8503 次 |
| 最近记录: |