scriptcat icon indicating copy to clipboard operation
scriptcat copied to clipboard

【建议】MV3新增Api用于处理Header|重定向|拦截

Open WhiteSevs opened this issue 1 year ago • 7 comments

类似插件https://he.firefoxcn.net/guide/custom-function#%E5%A6%82%E4%BD%95%E8%B0%83%E8%AF%95%E8%87%AA%E5%AE%9A%E4%B9%89%E5%87%BD%E6%95%B0的功能,但是可自定义更强

  • 修改请求头/响应头,如RefererUser-Agent
  • 重定向链接
  • 拦截链接
interface CAT_headerEditor_Rule {
    /**
     * 匹配规则
     */
    pattern: string | RegExp;
    /**
     * 排除规则
     */
    exclude: string | RegExp;
}
interface CAT_headerEditor_HeaderRule {
    /**
     * 传入Header,修改header
     * @param headers
     * @example
     * (headers)=>{
     *    headers.set("Referer","xxxxxx");
     *    headers.delete("Referer");
     *    headers.set("User-Agent": "xxxx");
     *    return headers;
     * }
     */
    callback: (headers: Headers) => Headers;
}
/**
 * 阻止请求
 */
interface CAT_headerEditor_blockRequest extends CAT_headerEditor_Rule {
    ruleType: "blockRequest";
}
/**
 * 重定向请求
 */
interface CAT_headerEditor_redirectRequest extends CAT_headerEditor_Rule {
    ruleType: "redirectRequest";
    /**
     * 传入完整的url
     * @param url
     * @returns
     * + null|undefined: 跳过
     * + string: 重定向URL
     * + "_header_editor_cancel_": 取消请求
     */
    callback: (
        url: string
    ) => string | null | undefined | "_header_editor_cancel_";
}
/**
 * 修改请求头
 */
interface CAT_headerEditor_modifyRequestHeader
    extends CAT_headerEditor_Rule,
        CAT_headerEditor_HeaderRule {
    ruleType: "modifyRequestHeader";
}
/**
 * 修改响应头
 */
interface CAT_headerEditor_modifyResponseHeader
    extends CAT_headerEditor_Rule,
        CAT_headerEditor_HeaderRule {
    ruleType: "modifyResponseHeader";
}
/**
 * 修改响应体
 * @only firefox
 */
interface CAT_headerEditor_modifyResponseBody extends CAT_headerEditor_Rule {
    ruleType: "modifyResponseBody";
}
/**
 * 所有的规则类型
 */
type CAT_headerEditor_OptionRuleType =
    | CAT_headerEditor_blockRequest["ruleType"]
    | CAT_headerEditor_redirectRequest["ruleType"]
    | CAT_headerEditor_modifyRequestHeader["ruleType"]
    | CAT_headerEditor_modifyResponseHeader["ruleType"]
    | CAT_headerEditor_modifyResponseBody["ruleType"];

/**
 * 配置
 */
interface CAT_headerEditor_Option {
    ruleType: CAT_headerEditor_OptionRuleType;
}

export const CAT_headerEditor = function (option: CAT_headerEditor_Option) {
    // 具体实现
};

WhiteSevs avatar Jun 18 '24 06:06 WhiteSevs

感觉不错,具体的等mv3重构完成再看看如何设计

CodFrm avatar Jun 20 '24 02:06 CodFrm

v3 响应结果好像改不了

Xdy1579883916 avatar Jul 29 '24 15:07 Xdy1579883916

响应结果mv2、mv3都改不了的

CodFrm avatar Jul 30 '24 01:07 CodFrm

需要基于chrome. declarativeNetRequest去开发这个API

好像与这个API挺像的:webRequest GM_webRequest https://github.com/scriptscat/scriptcat/issues/54

CodFrm avatar Jun 16 '25 03:06 CodFrm

需要基于chrome. declarativeNetRequest去开发这个API

好像与这个API挺像的:webRequest GM_webRequest #54

哥哥搞起来

WhiteSevs avatar Jun 16 '25 09:06 WhiteSevs

@WhiteSevs tampermonkey好像不再支持这个API了,可以开一个新的API CAT_netRequestRules

CodFrm avatar Jun 17 '25 09:06 CodFrm

https://github.com/scriptscat/scriptcat/commit/1d8b8195d460bf1cb03a9981039dcb8d15d79b56 几乎完全的使用chrome.declarativeNetRequest,可能还得看看要不要进行一些修改限制

哥哥定义的,通过回调代码的去实现规则,无法实现

CodFrm avatar Jun 17 '25 09:06 CodFrm