LDR Ad-Entry Blockerを悍ましい方法でchrome対応させたLDR Ad-Entry Blockerを悍ましい方法でchrome対応させた

<< | コメント(0) | トラックバック(0) このエントリーを含むはてなブックマーク >>

最近 Firefox から一部のサイト利用時のみ Google Chrome を使うようになりました。

livedoor reader も その1つなんですが、kuyさんの『LDR Ad-Entry Blocker』を始め、chrome でお勧め!みたいに紹介されていた『LDR prefav』も動いていなかった...

どっかの段階で chrome 側の仕様が変わったのかなぁ、とソースを見てみた所 unsafeWindow すら sandbox 内のものになる為、サイト側の作っているオブジェクトに触れなくなってる模様。

LDR のエントリを操作するタイプの user.js はLDR.register_hook を使っている為全滅してるみたい...

 

イベントをフックする所が問題なんだから、定期的に監視するみたいな感じで出来るんじゃないかなーと思ったけど、既に素晴しい user.js があるのに、いちいち新しいコードを書くのは面倒だなーと思って、悪足掻きしてみたら動いた。


前置きが長い。

 

悪足掻きのきっかけはこの edvakf さんの記事。( 本記事とは関係ないけど、pixiv入社おめでとうございます!

JavaScriptで遊ぶよ - g:javascript

ページ内に関数を定義する方法は、location.href='javascript:〜' とするか、script.textContent='〜', document.body.appendChild(script) とするしかない。

そういう事もできるのか。

 

という事でやってみた。

kuy さんの LDR Ad-Entry Blocker を、location.href に突っ込めるように1行にまとめて、文の終端をいくつか追加して、 javascript: を冒頭に置く。

 

(function(){
location.href= "javascript:function $x(x,c){c=c||document;var res=document.evaluate(x,c,null,4,null);for(var i,nodes=[];i=res.iterateNext();nodes.push(i));return nodes;}; var cfg = { patterns: [/^[\s【]*(AD|PR|AD|PR)[\s】]*[::]/i],style: {color: '#aaa', fontSize: '12px' }, interval: 1000, skip: true}; LDR.register_hook('AFTER_PRINTFEED', function() { var hist = []; var isComp = function(){ var len = hist.length; if(len < 3) return false; return hist[len-1] == hist[len-2] && hist[len-2] == hist[len-3]; }; var blocker = function(){ var titles = $x('//h2[@class=\"item_title\"]/a'); hist.push(titles.length); for(var i = 0; i < titles.length; i++){ var title = titles[i]; for(var j = 0; j < cfg.patterns.length; j++){ if((new RegExp(cfg.patterns[j])).test(title.innerHTML)){ setStyle(title, cfg.style); addClass(title.parentNode, 'laeb_blocked'); var childs = title.parentNode.parentNode.parentNode.childNodes; for(var k = 0; k < childs.length; k++){ if(childs[k].nodeType !== 1 || hasClass(childs[k], 'item_header')) continue; DOM.hide(childs[k]); } break; }; }; }; isComp() || setTimeout(blocker, cfg.interval); }; setTimeout(blocker, cfg.interval); }); if(cfg.skip){ var isEnd = function(dir){ var pos = get_active_item(); return dir ? pos == get_active_feed().items.length - 1 : pos == 0 }; var j_func = Keybind._keyfunc['j']; Keybind.add('j|enter', function(){ do{ j_func(); }while(!isEnd(true) && hasClass(get_active_item(true).element, 'laeb_blocked')); }); var k_func = Keybind._keyfunc['k']; Keybind.add('k|shift+enter', function(){ do{ k_func(); }while(!isEnd(false) && hasClass(get_active_item(true).element, 'laeb_blocked')); }); };";
})();

LDR Ad-Entry Blocker for Chrome -- Gist

 

おぞましい.........

.........

...

 

 

けどちゃんと動いたwwww

 ldr_ad_entry_blocker.png

 

うけるなー。

トラックバック(0)

トラックバックURL: http://exe.tyo.ro/mt/mt-tb.cgi/1306

コメントする

2014年10月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

月別 アーカイブ

2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年