diff --git a/src/js/contentscript.js b/src/js/contentscript.js index 59045fd0f..a9b8522eb 100644 --- a/src/js/contentscript.js +++ b/src/js/contentscript.js @@ -1331,7 +1331,8 @@ vAPI.DOMFilterer = class { // Library of resources is located at: // https://github.com/gorhill/uBlock/blob/master/assets/ublock/resources.txt - if ( scriptlets ) { + if ( scriptlets && typeof self.uBO_scriptletsInjected !== 'boolean' ) { + self.uBO_scriptletsInjected = true; vAPI.injectScriptlet(document, scriptlets); vAPI.injectedScripts = scriptlets; } @@ -1362,9 +1363,7 @@ vAPI.DOMFilterer = class { vAPI.messaging.send('contentscript', { what: 'retrieveContentScriptParameters', url: vAPI.effectiveSelf.location.href, - scriptletsInjected: - typeof self.uBO_scriptletsInjected === 'boolean' && - self.uBO_scriptletsInjected, + needScriptlets: typeof self.uBO_scriptletsInjected !== 'boolean', }).then(response => { bootstrapPhase1(response); }); diff --git a/src/js/messaging.js b/src/js/messaging.js index c920db9e4..820ac6a42 100644 --- a/src/js/messaging.js +++ b/src/js/messaging.js @@ -773,8 +773,8 @@ const retrieveContentScriptParameters = async function(sender, request) { // https://github.com/uBlockOrigin/uBlock-issues/issues/688#issuecomment-748179731 // For non-network URIs, scriptlet injection is deferred to here. The // effective URL is available here in `request.url`. - if ( request.scriptletsInjected !== true ) { - scriptletFilteringEngine.injectNow(request); + if ( request.needScriptlets ) { + response.scriptlets = scriptletFilteringEngine.injectNow(request); } // https://github.com/NanoMeow/QuickReports/issues/6#issuecomment-414516623 diff --git a/src/js/scriptlet-filtering.js b/src/js/scriptlet-filtering.js index 8c2be9ba9..72dcc444a 100644 --- a/src/js/scriptlet-filtering.js +++ b/src/js/scriptlet-filtering.js @@ -432,13 +432,17 @@ scriptletFilteringEngine.injectNow = function(details) { matchAboutBlank: true, runAt: 'document_start', }); - if ( logEntries === undefined ) { return; } - promise.then(results => { - if ( Array.isArray(results) === false || results[0] !== 0 ) { return; } - for ( const entry of logEntries ) { - logOne(entry.tabId, entry.url, entry.token); - } - }); + if ( logEntries !== undefined ) { + promise.then(results => { + if ( Array.isArray(results) === false || results[0] !== 0 ) { + return; + } + for ( const entry of logEntries ) { + logOne(entry.tabId, entry.url, entry.token); + } + }); + } + return scriptlets; }; scriptletFilteringEngine.toSelfie = function() {