1
0
mirror of https://github.com/gorhill/uBlock.git synced 2024-09-15 07:22:28 +02:00

select optimal hideElements depending on whether shadow DOM is supported

This commit is contained in:
gorhill 2015-09-15 09:51:22 -04:00
parent 02874dfd05
commit ab24f725ce

View File

@ -443,55 +443,58 @@ var uBlockCollapser = (function() {
//console.debug('µBlock> generic cosmetic filters: injecting %d CSS rules:', selectors.length, text); //console.debug('µBlock> generic cosmetic filters: injecting %d CSS rules:', selectors.length, text);
}; };
var hideElements = function(selectors) { var hideElements = (function() {
// https://github.com/chrisaljoudi/uBlock/issues/207
// Do not call querySelectorAll() using invalid CSS selectors
if ( selectors.length === 0 ) {
return;
}
if ( document.body === null ) { if ( document.body === null ) {
return; return function() {};
} }
var elems = document.querySelectorAll(selectors);
var i = elems.length;
if ( i === 0 ) {
return;
}
// https://github.com/chrisaljoudi/uBlock/issues/158
// Using CSSStyleDeclaration.setProperty is more reliable
if ( document.body.shadowRoot === undefined ) { if ( document.body.shadowRoot === undefined ) {
while ( i-- ) { return function(selectors) {
elems[i].style.setProperty('display', 'none', 'important'); // https://github.com/chrisaljoudi/uBlock/issues/207
} // Do not call querySelectorAll() using invalid CSS selectors
return; if ( selectors.length === 0 ) { return; }
var elems = document.querySelectorAll(selectors);
var i = elems.length;
if ( i === 0 ) { return; }
// https://github.com/chrisaljoudi/uBlock/issues/158
// Using CSSStyleDeclaration.setProperty is more reliable
while ( i-- ) {
elems[i].style.setProperty('display', 'none', 'important');
}
};
} }
// https://github.com/gorhill/uBlock/issues/435 return function(selectors) {
// Using shadow content so that we do not have to modify style if ( selectors.length === 0 ) { return; }
// attribute. var elems = document.querySelectorAll(selectors);
var sessionId = vAPI.sessionId; var i = elems.length;
var elem, shadow; if ( i === 0 ) { return; }
while ( i-- ) { // https://github.com/gorhill/uBlock/issues/435
elem = elems[i]; // Using shadow content so that we do not have to modify style
shadow = elem.shadowRoot; // attribute.
// https://www.chromestatus.com/features/4668884095336448 var sessionId = vAPI.sessionId;
// "Multiple shadow roots is being deprecated." var elem, shadow;
if ( shadow !== null ) { while ( i-- ) {
if ( shadow.className !== sessionId ) { elem = elems[i];
shadow = elem.shadowRoot;
// https://www.chromestatus.com/features/4668884095336448
// "Multiple shadow roots is being deprecated."
if ( shadow !== null ) {
if ( shadow.className !== sessionId ) {
elem.style.setProperty('display', 'none', 'important');
}
continue;
}
// https://github.com/gorhill/uBlock/pull/555
// Not all nodes can be shadowed:
// https://github.com/w3c/webcomponents/issues/102
try {
shadow = elem.createShadowRoot();
shadow.className = sessionId;
} catch (ex) {
elem.style.setProperty('display', 'none', 'important'); elem.style.setProperty('display', 'none', 'important');
} }
continue;
} }
// https://github.com/gorhill/uBlock/pull/555 };
// Not all nodes can be shadowed: })();
// https://github.com/w3c/webcomponents/issues/102
try {
shadow = elem.createShadowRoot();
shadow.className = sessionId;
} catch (ex) {
elem.style.setProperty('display', 'none', 'important');
}
}
};
// Extract and return the staged nodes which (may) match the selectors. // Extract and return the staged nodes which (may) match the selectors.