a
Some checks failed
test / Run tests (push) Failing after 13s
build / Build (push) Failing after 13s
Some checks failed
test / Run tests (push) Failing after 13s
build / Build (push) Failing after 13s
This commit is contained in:
parent
7697c91d95
commit
6d983ed0e4
@ -3,13 +3,17 @@ import { Group } from "@Packages/message/server";
|
||||
export class GMApi {
|
||||
constructor(private group: Group) {}
|
||||
|
||||
xmlHttpRequest(){
|
||||
|
||||
xmlHttpRequest(params: GMSend.XHRDetails) {
|
||||
console.log(params);
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open(params.method || "GET", params.url);
|
||||
xhr.onload = function () {
|
||||
console.log(xhr, xhr.getAllResponseHeaders());
|
||||
};
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
init() {
|
||||
this.group.on("xmlHttpRequest", async (data) => {
|
||||
console.log(data);
|
||||
});
|
||||
this.group.on("xmlHttpRequest", this.xmlHttpRequest.bind(this));
|
||||
}
|
||||
}
|
||||
|
@ -80,13 +80,18 @@ export default class GMApi {
|
||||
}
|
||||
|
||||
// 根据header生成dnr规则
|
||||
async buildDNRRule(params: GMSend.XHRDetails) {
|
||||
async buildDNRRule(reqeustId: number, params: GMSend.XHRDetails) {
|
||||
// 检查是否有unsafe header,有则生成dnr规则
|
||||
const headers = params.headers;
|
||||
if (!headers) {
|
||||
return;
|
||||
}
|
||||
const requestHeaders = [] as chrome.declarativeNetRequest.ModifyHeaderInfo[];
|
||||
const requestHeaders = [
|
||||
{
|
||||
header: "X-Scriptcat-GM-XHR-Request-Id",
|
||||
operation: chrome.declarativeNetRequest.HeaderOperation.REMOVE,
|
||||
},
|
||||
] as chrome.declarativeNetRequest.ModifyHeaderInfo[];
|
||||
Object.keys(headers).forEach((key) => {
|
||||
const lowKey = key.toLowerCase();
|
||||
if (unsafeHeaders[lowKey] || lowKey.startsWith("sec-") || lowKey.startsWith("proxy-")) {
|
||||
@ -97,10 +102,7 @@ export default class GMApi {
|
||||
});
|
||||
}
|
||||
});
|
||||
if (requestHeaders.length === 0) {
|
||||
return;
|
||||
}
|
||||
const ruleId = 1000 + (await incr(Cache.getInstance(), "dnrRuleId", 1));
|
||||
const ruleId = reqeustId;
|
||||
const rule = {} as chrome.declarativeNetRequest.Rule;
|
||||
rule.id = ruleId;
|
||||
rule.action = {
|
||||
@ -120,25 +122,67 @@ export default class GMApi {
|
||||
urlFilter: "^" + params.url + "$",
|
||||
excludedTabIds: excludedTabIds,
|
||||
};
|
||||
return chrome.declarativeNetRequest.updateSessionRules({
|
||||
await chrome.declarativeNetRequest.updateSessionRules({
|
||||
removeRuleIds: [ruleId],
|
||||
addRules: [rule],
|
||||
});
|
||||
return ruleId;
|
||||
}
|
||||
|
||||
@PermissionVerify.API()
|
||||
async GM_xmlhttpRequest(request: Request, con: MessageConnect) {
|
||||
if (request.params.length === 0) {
|
||||
return Promise.reject(new Error("param is failed"));
|
||||
}
|
||||
const params = request.params[0] as GMSend.XHRDetails;
|
||||
console.log("xml request", request, con);
|
||||
// 先处理unsafe hearder
|
||||
await this.buildDNRRule(request.params[0]);
|
||||
// 关联自己生成的请求id与chrome.webRequest的请求id
|
||||
const requestId = 10000 + (await incr(Cache.getInstance(), "gmXhrRequestId", 1));
|
||||
// 添加请求header
|
||||
if (!params.headers) {
|
||||
params.headers = {};
|
||||
}
|
||||
params.headers["X-Scriptcat-GM-XHR-Request-Id"] = requestId.toString();
|
||||
await this.buildDNRRule(requestId, request.params[0]);
|
||||
|
||||
// 再发送到offscreen, 处理请求
|
||||
connect(this.sender, "gmApi/xmlHttpRequest", request.params);
|
||||
connect(this.sender, "gmApi/xmlHttpRequest", request.params[0]);
|
||||
}
|
||||
|
||||
start() {
|
||||
this.group.on("gmApi", this.handlerRequest.bind(this));
|
||||
|
||||
// 处理收到的header
|
||||
console.log("123");
|
||||
chrome.webRequest.onSendHeaders.addListener(
|
||||
(details) => {
|
||||
console.log("onSendHeaders", details);
|
||||
},
|
||||
{
|
||||
urls: ["<all_urls>"],
|
||||
types: ["xmlhttprequest"],
|
||||
},
|
||||
["requestHeaders", "extraHeaders"]
|
||||
);
|
||||
chrome.webRequest.onBeforeSendHeaders.addListener(
|
||||
(details) => {
|
||||
console.log("onBeforeSendHeaders", details);
|
||||
return {
|
||||
requestHeaders: [
|
||||
{
|
||||
name: "X-Scriptcat-GM-XHR-Request-Id",
|
||||
value: "123",
|
||||
},
|
||||
],
|
||||
};
|
||||
},
|
||||
{
|
||||
urls: ["<all_urls>"],
|
||||
types: ["xmlhttprequest"],
|
||||
},
|
||||
["requestHeaders"]
|
||||
);
|
||||
chrome.webRequest.onHeadersReceived.addListener(
|
||||
(details) => {
|
||||
console.log(details);
|
||||
|
Loading…
x
Reference in New Issue
Block a user