Skip to content

Commit 71b967f

Browse files
committed
this addresses gorhill#850
1 parent 2dee9a4 commit 71b967f

1 file changed

Lines changed: 44 additions & 28 deletions

File tree

src/js/contentscript-end.js

Lines changed: 44 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ var uBlockCollapser = (function() {
259259
if ( node.localName === 'iframe' ) {
260260
addIFrame(node);
261261
}
262-
var iframes = node.querySelectorAll('iframe');
262+
var iframes = node.getElementsByTagName('iframe');
263263
var i = iframes.length;
264264
while ( i-- ) {
265265
addIFrame(iframes[i]);
@@ -580,38 +580,47 @@ var uBlockCollapser = (function() {
580580
// - [href^="http"]
581581

582582
var processHighMediumGenerics = function(generics, out) {
583-
var nodeList = selectNodes('a[href^="http"]');
584-
var iNode = nodeList.length;
585-
var node, href, pos, hash, selectors, selector, iSelector;
583+
var doc = document;
584+
var i = contextNodes.length;
585+
var aa = [ null ];
586+
var node, nodes;
587+
while ( i-- ) {
588+
node = contextNodes[i];
589+
if ( node.localName === 'a' ) {
590+
aa[0] = node;
591+
processHighMediumGenericsForNodes(aa, generics, out);
592+
}
593+
nodes = node.getElementsByTagName('a');
594+
if ( nodes.length === 0 ) { continue; }
595+
processHighMediumGenericsForNodes(nodes, generics, out);
596+
if ( node === doc ) {
597+
break;
598+
}
599+
}
600+
};
586601

587-
while ( iNode-- ) {
588-
node = nodeList[iNode];
602+
var processHighMediumGenericsForNodes = function(nodes, generics, out) {
603+
var i = nodes.length;
604+
var node, href, pos, hash, selectors, j, selector;
605+
var aa = [ '' ];
606+
while ( i-- ) {
607+
node = nodes[i];
589608
href = node.getAttribute('href');
590609
if ( !href ) { continue; }
591-
592610
pos = href.indexOf('://');
593611
if ( pos === -1 ) { continue; }
594-
595612
hash = href.slice(pos + 3, pos + 11);
596613
selectors = generics[hash];
597614
if ( selectors === undefined ) { continue; }
598-
599615
// A string.
600616
if ( typeof selectors === 'string' ) {
601-
if (
602-
href.lastIndexOf(selectors.slice(8, -2), 0) === 0 &&
603-
injectedSelectors.hasOwnProperty(selectors) === false
604-
) {
605-
injectedSelectors[selectors] = true;
606-
out.push(selectors);
607-
}
608-
continue;
617+
aa[0] = selectors;
618+
selectors = aa;
609619
}
610-
611620
// An array of strings.
612-
iSelector = selectors.length;
613-
while ( iSelector-- ) {
614-
selector = selectors[iSelector];
621+
j = selectors.length;
622+
while ( j-- ) {
623+
selector = selectors[j];
615624
if (
616625
href.lastIndexOf(selector.slice(8, -2), 0) === 0 &&
617626
injectedSelectors.hasOwnProperty(selector) === false
@@ -687,8 +696,7 @@ var uBlockCollapser = (function() {
687696
while ( i-- ) {
688697
node = nodes[i];
689698
if ( node.nodeType !== 1 ) { continue; }
690-
// id
691-
v = nodes[i].id;
699+
v = node.id;
692700
if ( typeof v !== 'string' ) { continue; }
693701
v = v.trim();
694702
if ( v === '' ) { continue; }
@@ -891,20 +899,27 @@ var uBlockCollapser = (function() {
891899
/******************************************************************************/
892900

893901
// https://github.com/chrisaljoudi/uBlock/issues/7
894-
895-
// Executed only once
902+
// Executed only once.
903+
// Preferring getElementsByTagName over querySelectorAll:
904+
// http://jsperf.com/queryselectorall-vs-getelementsbytagname/145
896905

897906
(function() {
898907
var collapser = uBlockCollapser;
899908
var elems, i, elem;
900909

901-
elems = document.querySelectorAll('embed, object');
910+
elems = document.getElementsByTagName('embed');
902911
i = elems.length;
903912
while ( i-- ) {
904913
collapser.add(elems[i]);
905914
}
906915

907-
elems = document.querySelectorAll('img');
916+
elems = document.getElementsByTagName('object');
917+
i = elems.length;
918+
while ( i-- ) {
919+
collapser.add(elems[i]);
920+
}
921+
922+
elems = document.getElementsByTagName('img');
908923
i = elems.length;
909924
while ( i-- ) {
910925
elem = elems[i];
@@ -913,11 +928,12 @@ var uBlockCollapser = (function() {
913928
}
914929
}
915930

916-
elems = document.querySelectorAll('iframe');
931+
elems = document.getElementsByTagName('iframe');
917932
i = elems.length;
918933
while ( i-- ) {
919934
collapser.addIFrame(elems[i]);
920935
}
936+
921937
collapser.process(0);
922938
})();
923939

0 commit comments

Comments
 (0)