@@ -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