diff --git a/assets/resources/scriptlets.js b/assets/resources/scriptlets.js index da232b70a..71c98dcc2 100644 --- a/assets/resources/scriptlets.js +++ b/assets/resources/scriptlets.js @@ -1332,6 +1332,8 @@ function replaceFetchResponseFn( if ( pattern === '*' ) { pattern = '.*'; } const rePattern = safe.patternToRegex(pattern); const propNeedles = parsePropertiesToMatch(propsToMatch, 'url'); + const extraArgs = safe.getExtraArgs(Array.from(arguments), 4); + const reIncludes = extraArgs.includes ? safe.patternToRegex(extraArgs.includes) : null; self.fetch = new Proxy(self.fetch, { apply: function(target, thisArg, args) { const fetchPromise = Reflect.apply(target, thisArg, args); @@ -1361,6 +1363,9 @@ function replaceFetchResponseFn( return fetchPromise.then(responseBefore => { const response = responseBefore.clone(); return response.text().then(textBefore => { + if ( reIncludes && reIncludes.test(textBefore) === false ) { + return responseBefore; + } const textAfter = textBefore.replace(rePattern, replacement); const outcome = textAfter !== textBefore ? 'match' : 'nomatch'; if ( outcome === 'nomatch' ) { return responseBefore; } @@ -4365,6 +4370,8 @@ function trustedReplaceXhrResponse( if ( pattern === '*' ) { pattern = '.*'; } const rePattern = safe.patternToRegex(pattern); const propNeedles = parsePropertiesToMatch(propsToMatch, 'url'); + const extraArgs = safe.getExtraArgs(Array.from(arguments), 3); + const reIncludes = extraArgs.includes ? safe.patternToRegex(extraArgs.includes) : null; self.XMLHttpRequest = class extends self.XMLHttpRequest { open(method, url, ...args) { const outerXhr = this; @@ -4402,6 +4409,9 @@ function trustedReplaceXhrResponse( if ( typeof innerResponse !== 'string' ) { return (xhrDetails.response = innerResponse); } + if ( reIncludes && reIncludes.test(innerResponse) === false ) { + return (xhrDetails.response = innerResponse); + } const textBefore = innerResponse; const textAfter = textBefore.replace(rePattern, replacement); if ( textAfter !== textBefore ) {