画像の読み込みを制御するグリモン(複数ページ対応版)
AutoPagerizeっぽく指定できるようにしてみた。
// ==UserScript== // @name imgBlocker // @namespace http://d.hatena.ne.jp/TakiTake/ // @include * // ==/UserScript== var SITEINFO = [ /* sample { url: 'http://www.hatena.ne.jp/', allowedElement: 'id("headtable")' }, */ /* template { url: '', allowedElement: '' }, */ { // はてなのナビゲーションのみ許可 url: 'http://www.hatena.ne.jp/', allowedElement: 'id("headtable")' }, { // はてブの注目の動画のみ許可 url: 'http://b.hatena.ne.jp/*', allowedElement: '/html/body/div/div[3]/div[2]/div[3]' } ] function $x(query) { return document.evaluate(query,document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null); } function log() { unsafeWindow.console.log.apply(this, arguments); } var imgBlocker = function(info) { var elems = $x(info.allowedElement); var allowedElements = []; for (var i = 0, l = elems.snapshotLength; i < l; i++) { var elem = elems.snapshotItem(i); allowedElements.push({ org: elem, cp: elem.cloneNode(true) }); } var images = document.images; for (var i = 0, l = images.length; i < l; i++) { // 画像データ直に設定 images.item(i).src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=='; } var iframes = $x('/html/body//iframe'); for(var i=0,l=iframes.snapshotLength;i<l;i++) { iframes.snapshotItem(i).src = 'about:blank'; } // 許可した要素のsrcだけ元に戻す allowedElements.forEach(function(allowedElement) { allowedElement.org.parentNode.replaceChild(allowedElement.cp, allowedElement.org); }); // 許可した要素のみ存在するページにする // 許可した要素だけあればいい人用。「許可した要素のsrcだけ元に戻す」をコメントアウトして、こっちのコメントアウト外す /* var _body = document.createElement('body'); allowedElements.forEach(function(allowedElement) { _body.appendChild(allowedElement.cp); }); document.documentElement.replaceChild(_body, document.body); */ } var launchImgBlocker = function(list) { for (var i = 0, l = list.length; i < l; i++) { try { if (!location.href.match(list[i].url)) { } else if (!$x(list[i].allowedElement)) { log("allowedElement not found.", list[i].allowedElement); } else { new imgBlocker(list[i]); return; } } catch(e) { log(e); continue; } } } launchImgBlocker(SITEINFO);