diff --git a/example/cat_net_request.js b/example/cat_net_request.js new file mode 100644 index 000000000..66c47fafd --- /dev/null +++ b/example/cat_net_request.js @@ -0,0 +1,19 @@ +// ==UserScript== +// @name CAT_netRequestRules +// @namespace https://bbs.tampermonkey.net.cn/ +// @version 0.1.0 +// @description try to take over the world! +// @author You +// @match {{match}} +// @grant CAT_netRequestRules +// ==/UserScript== + +/** + * @typedef {import('../src/types/scriptcat')} ScriptCat + */ + +CAT_netRequestRules("list", { + ondone(data) { + console.log("list", data); + }, +}); diff --git a/src/app/service/service_worker/gm_api.ts b/src/app/service/service_worker/gm_api.ts index 9016b3fb4..43ad80e99 100644 --- a/src/app/service/service_worker/gm_api.ts +++ b/src/app/service/service_worker/gm_api.ts @@ -1001,6 +1001,11 @@ export default class GMApi { }); } + @PermissionVerify.API() + async CAT_netRequestRules(request: Request, sender: GetSender) { + chrome.declarativeNetRequest.updateSessionRules() + } + handlerNotification() { const send = async (event: string, notificationId: string, params?: any) => { const ret = (await Cache.getInstance().get(`GM_notification:${notificationId}`)) as NotificationData; diff --git a/src/template/scriptcat.d.tpl b/src/template/scriptcat.d.tpl index 7d3261789..be8d25ce5 100644 --- a/src/template/scriptcat.d.tpl +++ b/src/template/scriptcat.d.tpl @@ -306,8 +306,39 @@ declare namespace CATType { // 文件修改时间 updatetime: number; } + + namespace NetRequestRules { + /** + * 配置 + */ + type Option = T extends "list" + ? { + ondone: (rules: chrome.declarativeNetRequest.Rule[]) => void; + } + : T extends "delete" + ? { + removeRuleIds: number[]; + } + : T extends "set" + ? { + rules: chrome.declarativeNetRequest.Rule[]; + } + : never; + + // 支持的操作 + type OptionType = "list" | "delete" | "set"; + } } +/** + * 脚本猫网络请求规则,详情可以参考chrome.declarativeNetRequest API + * https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest?hl=zh-cn#type-UpdateRuleOptions + * @param option 配置选项 + */ +declare function CAT_netRequestRules( + option: CATType.NetRequestRules.Option +): void; + declare namespace GMTypes { type CookieAction = "list" | "delete" | "set"; diff --git a/src/types/scriptcat.d.ts b/src/types/scriptcat.d.ts index 7d3261789..be8d25ce5 100644 --- a/src/types/scriptcat.d.ts +++ b/src/types/scriptcat.d.ts @@ -306,8 +306,39 @@ declare namespace CATType { // 文件修改时间 updatetime: number; } + + namespace NetRequestRules { + /** + * 配置 + */ + type Option = T extends "list" + ? { + ondone: (rules: chrome.declarativeNetRequest.Rule[]) => void; + } + : T extends "delete" + ? { + removeRuleIds: number[]; + } + : T extends "set" + ? { + rules: chrome.declarativeNetRequest.Rule[]; + } + : never; + + // 支持的操作 + type OptionType = "list" | "delete" | "set"; + } } +/** + * 脚本猫网络请求规则,详情可以参考chrome.declarativeNetRequest API + * https://developer.chrome.com/docs/extensions/reference/api/declarativeNetRequest?hl=zh-cn#type-UpdateRuleOptions + * @param option 配置选项 + */ +declare function CAT_netRequestRules( + option: CATType.NetRequestRules.Option +): void; + declare namespace GMTypes { type CookieAction = "list" | "delete" | "set";