javascript:(function(){
const THRESHOLD = 10000;
var bottoms = [], ary = [];
var xp = document.evaluate('/html/body/descendant::*[not(child::*)]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i=0,l=xp.snapshotLength; i<l; i++) bottoms[i] = xp.snapshotItem(i);
bottoms.forEach(function(v){
var s = v.offsetWidth * v.offsetHeight, t;
while ((v = v.parentNode) && !(/body/i).test(v.nodeName)) {
t = v.offsetWidth * v.offsetHeight;
if (s > THRESHOLD) ary.push({node: v, ratio: t/s});
s = t;
}
});
ary.sort(function(a,b){return b.ratio - a.ratio;});
ary[0].node.style.border = "5px solid red";
})();
pageElement推定
子ノードとの描画サイズ比から推定。
うーん、ぼちぼち。
追記
親ノードも考慮する版。
javascript:(function(){
const THRESHOLD = 10000;
var bottoms = [], ary = [];
var xp = document.evaluate('/html/body/descendant::*[not(child::*)]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i=0,l=xp.snapshotLength; i<l; i++) bottoms[i] = xp.snapshotItem(i);
bottoms.forEach(function(v){
var s = v.offsetWidth * v.offsetHeight, t, u, p;
v = v.parentNode;
t = v.offsetWidth * v.offsetHeight;
while (!(/body/i).test(v.nodeName)) {
p = v;
do {
p = p.parentNode;
u = p.offsetWidth * p.offsetHeight;
} while (!(u > THRESHOLD))
if (s > THRESHOLD) ary.push({node: v, ratio: t*t/s/u});
s = t;
t = u;
v = v.parentNode;
}
});
ary.sort(function(a,b){return b.ratio - a.ratio;});
ary[0].node.style.border = "5px solid red";
})();
pageElement推定(親も使う)
前者でも十分ぽいなあ。