今天使用了Header Editor
这个插件用来修改header,发现它可以自定义使用js
来对header进行修改,想知道脚本猫可以做个相关Api来修改header吗,感觉做的话功能会更强大,更多的想法可以实现了,不知道MV3
中能否实现,比如某些链接的Referer
和User-Agent
鉴权,但是破坏性应该是挺强的
相关链接: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
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) {
// 具体实现
};