Skip to content

Commit 715639e

Browse files
committed
🐛 修复重定向后的携带#号的finalUrl问题
1 parent c309832 commit 715639e

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

.github/workflows/test.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on:
44
push:
55
branches:
66
- main
7-
- release/*
7+
- dev
88
- develop/*
99
pull_request:
1010

src/runtime/background/utils.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ export function listenerWebRequest(headerFlag: string) {
6565
respOpt.push("extraHeaders");
6666
}
6767
const maxRedirects = new Map<string, [number, number]>();
68+
const isRedirects = new Map<string, boolean>();
6869
// 处理发送请求的unsafeHeaders
6970
chrome.webRequest.onBeforeSendHeaders.addListener(
7071
(details) => {
@@ -220,6 +221,7 @@ export function listenerWebRequest(headerFlag: string) {
220221
}
221222
// 处理最大重定向次数
222223
if (lowerCase === "location") {
224+
isRedirects.set(details.requestId, true);
223225
const nums = maxRedirects.get(details.requestId);
224226
if (nums) {
225227
nums[0] += 1;
@@ -231,6 +233,13 @@ export function listenerWebRequest(headerFlag: string) {
231233
}
232234
});
233235
details.responseHeaders?.push(...appendHeaders);
236+
// 判断是否为重定向请求,如果是,将url注入到finalUrl
237+
if (isRedirects.has(details.requestId)) {
238+
details.responseHeaders?.push({
239+
name: `${headerFlag}-final-url`,
240+
value: details.url,
241+
});
242+
}
234243
return {
235244
responseHeaders: details.responseHeaders,
236245
};
@@ -247,6 +256,7 @@ export function listenerWebRequest(headerFlag: string) {
247256
}
248257
// 删除最大重定向数缓存
249258
maxRedirects.delete(details.requestId);
259+
isRedirects.delete(details.requestId);
250260
},
251261
{ urls: ["<all_urls>"] }
252262
);
@@ -335,9 +345,15 @@ export async function dealXhr(
335345
config: GMSend.XHRDetails,
336346
xhr: XMLHttpRequest
337347
): Promise<GMTypes.XHRResponse> {
348+
let finalUrl = xhr.responseURL || config.url;
349+
// 判断是否有headerFlag-final-url,有则替换finalUrl
350+
const finalUrlHeader = xhr.getResponseHeader(`${headerFlag}-final-url`);
351+
if (finalUrlHeader) {
352+
finalUrl = finalUrlHeader;
353+
}
338354
const removeXCat = new RegExp(`${headerFlag}-`, "g");
339355
const respond: GMTypes.XHRResponse = {
340-
finalUrl: xhr.responseURL || config.url,
356+
finalUrl,
341357
readyState: <any>xhr.readyState,
342358
status: xhr.status,
343359
statusText: xhr.statusText,

0 commit comments

Comments
 (0)