diff --git a/src/js/background.js b/src/js/background.js index 11ec4c7e9..a9e99f636 100644 --- a/src/js/background.js +++ b/src/js/background.js @@ -120,6 +120,7 @@ var µBlock = (function() { // jshint ignore:line privacySettingsSupported: vAPI.browserSettings instanceof Object, cloudStorageSupported: vAPI.cloud instanceof Object, canFilterResponseBody: vAPI.net.canFilterResponseBody === true, + canInjectScriptletsNow: vAPI.webextFlavor.soup.has('chromium'), // https://github.com/chrisaljoudi/uBlock/issues/180 // Whitelist directives need to be loaded once the PSL is available diff --git a/src/js/contentscript.js b/src/js/contentscript.js index eb97b75fa..916fb5b1e 100644 --- a/src/js/contentscript.js +++ b/src/js/contentscript.js @@ -349,12 +349,16 @@ vAPI.matchesProp = (function() { vAPI.injectScriptlet = function(doc, text) { if ( !doc ) { return; } + let script; try { - var script = doc.createElement('script'); + script = doc.createElement('script'); script.appendChild(doc.createTextNode(text)); (doc.head || doc.documentElement).appendChild(script); } catch (ex) { } + if ( script && script.parentNode ) { + script.parentNode.removeChild(script); + } }; /******************************************************************************/ diff --git a/src/js/messaging.js b/src/js/messaging.js index f7199324c..f138d30a0 100644 --- a/src/js/messaging.js +++ b/src/js/messaging.js @@ -520,6 +520,9 @@ var onMessage = function(request, sender, callback) { request.entity = µb.URI.entityFromDomain(request.domain); response.specificCosmeticFilters = µb.cosmeticFilteringEngine.retrieveDomainSelectors(request, response); + if ( µb.canInjectScriptletsNow === false ) { + response.scriptlets = µb.scriptletFilteringEngine.retrieve(request); + } if ( request.isRootFrame && µb.logger.isEnabled() ) { µb.logCosmeticFilters(tabId); } diff --git a/src/js/scriptlet-filtering.js b/src/js/scriptlet-filtering.js index 075b3e744..5cfd1932a 100644 --- a/src/js/scriptlet-filtering.js +++ b/src/js/scriptlet-filtering.js @@ -224,9 +224,8 @@ return; } - var domain = request.domain, - entity = request.entity, - entries, entry; + let domain = request.domain, + entity = request.entity; // https://github.com/gorhill/uBlock/issues/1954 // Implicit @@ -243,13 +242,13 @@ } // Explicit - entries = []; + let entries = []; if ( domain !== '' ) { scriptletDB.retrieve(domain, hostname, entries); scriptletDB.retrieve(entity, entity, entries); } scriptletDB.retrieve('', hostname, entries); - for ( entry of entries ) { + for ( let entry of entries ) { lookupScriptlet(entry.token, reng, scriptletsRegister); } @@ -262,15 +261,15 @@ scriptletDB.retrieve('!' + entity, entity, entries); } scriptletDB.retrieve('!', hostname, entries); - for ( entry of entries ) { + for ( let entry of entries ) { exceptionsRegister.add(entry.token); } // Return an array of scriptlets, and log results if needed. - var out = [], + let out = [], logger = µb.logger.isEnabled() ? µb.logger : null, isException; - for ( entry of scriptletsRegister ) { + for ( let entry of scriptletsRegister ) { if ( (isException = exceptionsRegister.has(entry[0])) === false ) { out.push(entry[1]); } @@ -284,6 +283,9 @@ if ( out.length === 0 ) { return; } + if ( µb.hiddenSettings.debugScriptlets ) { + out.unshift('debugger;'); + } return out.join('\n'); }; @@ -303,9 +305,6 @@ let scriptlets = µb.scriptletFilteringEngine.retrieve(request); if ( scriptlets === undefined ) { return; } let code = contentscriptCode.assemble(request.hostname, scriptlets); - if ( µb.hiddenSettings.debugScriptlets ) { - code = 'debugger;\n' + code; - } chrome.tabs.executeScript( details.tabId, { diff --git a/src/js/tab.js b/src/js/tab.js index 881ce2b3f..56b3ffcfc 100644 --- a/src/js/tab.js +++ b/src/js/tab.js @@ -493,7 +493,9 @@ vAPI.tabs.onNavigation = function(details) { pageStore.journalAddRootFrame('committed', details.url); } } - µb.scriptletFilteringEngine.injectNow(details); + if ( µb.canInjectScriptletsNow ) { + µb.scriptletFilteringEngine.injectNow(details); + } }; /******************************************************************************/