
1.permissions
manifest V2
"permissions" : [ "http://*/*", "https://*/*", "tabs" ]
manifest V3
网站权限需单独列出
"permissions" : [ "tabs" ],
"host_permissions": [ "http://*/*", "https://*/*"]
2.background
manifest V2
"background": {
"scripts": ["background.js"]
}
manifest V3
"background": {
"service_worker": "background.js"
}
3.browser_action
manifest V2
"browser_action": {
"default_icon": "icon.png",
"default_title": "HLSPlayer"
}
chrome.browserAction.onClicked.addListener(...)
manifest V3
去掉了 browser
"action": {
"default_popup": "popup.html",
"default_icon": { "128": "images/icon128.png" }
}
chrome.action.onClicked.addListener(...)
4.executeScript
manifest V2
chrome.tabs.executeScript({ file: "content.js" });
manifest V3
"permissions": [ "scripting" ]
chrome.scripting.executeScript({
target : { tabId : tab.id },
files : [ "content.js" ]
});
5.webRequestBlocking
manifest V2
"permissions": [ "webRequestBlocking" ]
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
return { cancel: false };
},
{ urls: [ "<all_urls>" ] },
[ "blocking" ] // 在 Manifest V3 中不再需要这个参数
);
manifest V3
declarativeNetRequest.Redirect - Mozilla | MDN
Native MPEG-Dash + HLS Playback - Microsoft Edge Addons
regexSubstitution:正则匹配,\\0 匹配整个 URL。
*.m3u8 跳转
"permissions": [ "declarativeNetRequest" ]
let playerUrl = chrome.runtime.getURL('player.htm');
let substitution = playerUrl + '#\\0';
chrome.declarativeNetRequest.updateDynamicRules({
removeRuleIds: [1], //不写报错:Rule with id 1 does not have a unique ID.
addRules: [{
id: 1,
priority: 1,
action: { type: 'redirect', redirect: { regexSubstitution: substitution } },
condition: { regexFilter: '^https?://.*/.*\\.m3u8(\\?.*)?', resourceType: ['main_frame'] }
}]
});
6.右键菜单点击
manifest V2
chrome.contextMenus.create({
id : "property",
title : "Property",
contexts : ["video"],
documentUrlPatterns : showForPages,
onclick : propertyClicked
});
manifest V3
Extensions using event pages or Service Workers cannot pass an onclick parameter to chrome.contextMenus.create. Instead, use the chrome.contextMenus.onClicked event.
chrome.runtime.onInstalled.addListener(function(){
chrome.contextMenus.create({
id : "property",
title : "Property",
contexts : ["video"],
documentUrlPatterns : showForPages,
});
});
chrome.contextMenus.onClicked.addListener((info, tab) => {
console.log("右键菜单被点击", info, tab);
});
7.通信
manifest V2
chrome.tabs.sendRequest()
chrome.extension.onRequest.addListener()
manifest V3
chrome.runtime.sendMessage();
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {});
8.chrome.extension.getBackgroundPage() == undefined
chrome.extension | API | Chrome for Developers
这个 API 在 MV3 无效,但是官方文档没有更新。
9.unsafe-eval
setTimeout(chrome.runtime.sendMessage({}), 100);
改为
setTimeout(function(){ chrome.runtime.sendMessage({}); }, 100);
6229

被折叠的 条评论
为什么被折叠?



