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 {
|
export class GMApi {
|
||||||
constructor(private group: Group) {}
|
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() {
|
init() {
|
||||||
this.group.on("xmlHttpRequest", async (data) => {
|
this.group.on("xmlHttpRequest", this.xmlHttpRequest.bind(this));
|
||||||
console.log(data);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -80,13 +80,18 @@ export default class GMApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 根据header生成dnr规则
|
// 根据header生成dnr规则
|
||||||
async buildDNRRule(params: GMSend.XHRDetails) {
|
async buildDNRRule(reqeustId: number, params: GMSend.XHRDetails) {
|
||||||
// 检查是否有unsafe header,有则生成dnr规则
|
// 检查是否有unsafe header,有则生成dnr规则
|
||||||
const headers = params.headers;
|
const headers = params.headers;
|
||||||
if (!headers) {
|
if (!headers) {
|
||||||
return;
|
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) => {
|
Object.keys(headers).forEach((key) => {
|
||||||
const lowKey = key.toLowerCase();
|
const lowKey = key.toLowerCase();
|
||||||
if (unsafeHeaders[lowKey] || lowKey.startsWith("sec-") || lowKey.startsWith("proxy-")) {
|
if (unsafeHeaders[lowKey] || lowKey.startsWith("sec-") || lowKey.startsWith("proxy-")) {
|
||||||
@ -97,10 +102,7 @@ export default class GMApi {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (requestHeaders.length === 0) {
|
const ruleId = reqeustId;
|
||||||
return;
|
|
||||||
}
|
|
||||||
const ruleId = 1000 + (await incr(Cache.getInstance(), "dnrRuleId", 1));
|
|
||||||
const rule = {} as chrome.declarativeNetRequest.Rule;
|
const rule = {} as chrome.declarativeNetRequest.Rule;
|
||||||
rule.id = ruleId;
|
rule.id = ruleId;
|
||||||
rule.action = {
|
rule.action = {
|
||||||
@ -120,25 +122,67 @@ export default class GMApi {
|
|||||||
urlFilter: "^" + params.url + "$",
|
urlFilter: "^" + params.url + "$",
|
||||||
excludedTabIds: excludedTabIds,
|
excludedTabIds: excludedTabIds,
|
||||||
};
|
};
|
||||||
return chrome.declarativeNetRequest.updateSessionRules({
|
await chrome.declarativeNetRequest.updateSessionRules({
|
||||||
removeRuleIds: [ruleId],
|
removeRuleIds: [ruleId],
|
||||||
addRules: [rule],
|
addRules: [rule],
|
||||||
});
|
});
|
||||||
|
return ruleId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@PermissionVerify.API()
|
@PermissionVerify.API()
|
||||||
async GM_xmlhttpRequest(request: Request, con: MessageConnect) {
|
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);
|
console.log("xml request", request, con);
|
||||||
// 先处理unsafe hearder
|
// 先处理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, 处理请求
|
// 再发送到offscreen, 处理请求
|
||||||
connect(this.sender, "gmApi/xmlHttpRequest", request.params);
|
connect(this.sender, "gmApi/xmlHttpRequest", request.params[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
this.group.on("gmApi", this.handlerRequest.bind(this));
|
this.group.on("gmApi", this.handlerRequest.bind(this));
|
||||||
|
|
||||||
// 处理收到的header
|
// 处理收到的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(
|
chrome.webRequest.onHeadersReceived.addListener(
|
||||||
(details) => {
|
(details) => {
|
||||||
console.log(details);
|
console.log(details);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user