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:
parent
02874dfd05
commit
ab24f725ce
@ -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.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user