Chrome Extension: manifest V2 彻底停用

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

Manifest V3 getBackgroundPage() 返回 undefined 或报错 You do not have a background page. 的巨坑 - TimTu - 博客园

chrome.extension  |  API  |  Chrome for Developers

这个 API 在 MV3 无效,但是官方文档没有更新。

9.unsafe-eval

setTimeout(chrome.runtime.sendMessage({}), 100);

改为

setTimeout(function(){ chrome.runtime.sendMessage({}); }, 100);

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值