2010/02/14

Auto Read Adsを修正

Greasemonkey用スクリプトのGoogle Reader Auto Read AdsChromeに入れたのですが、正常に動かなかったため修正しました。一部コメントアウトしただけですが。

Auto Read Adsでは、

  1. "PR:"などで始まるアイテムの高さを0にする
  2. クリックイベントを発生させて、既読にする
という二つの処理を行っています。

後者の既読化処理は、「リスト表示」でn/pキーで移動すると通り過ぎたアイテムも既読にならないための処置かと思うのですが、私は「全文表示」でマウスホイールで流し読みするため、基本全て既読になるので要りません。

ところが、Chromeでこのクリックイベントが発生すると、なぜかフォーカスが一覧の先頭に戻ってしまいます。数百件読み流した後に、PRアイテムがあったりすると凄い勢いで上下に移動して軽く酔います。

ということで、クリックイベントを消しました。また、全文表示で高さ0だと表示がおかしくなる事がありました。PRアイテム+もう一個の2アイテムしかない場合など。そのため、高さを5に微調整。

スクリプトを入れなおした後は、例によってF5等でリロードしないと適用されませんでした。

  1. // ==UserScript==  
  2. // @author         F.Ko-Ji  
  3. // @name           Google Reader Auto Read Ads  
  4. // @namespace      http://blog.fkoji.com/  
  5. // @description    This script click entries whose title "PR: " automatically  
  6. // @version        0.3  
  7. // @include        http://www.google.*/reader*  
  8. // @include        https://www.google.*/reader*  
  9. // ==/UserScript==  
  10.   
  11. document.body.addEventListener("DOMNodeInserted"function(e) {  
  12.     var element = e.target;  
  13.     if (!element.className.match(/^entry/)) return;  
  14.     var title = element.getElementsByTagName("h2")[0];  
  15.     if (title.textContent.match(/^(PR:|AD:|\[PR\])/i)) {  
  16.         element.style.height = 5;  
  17. //        var event = title.ownerDocument.createEvent("MouseEvents");  
  18. //        event.initMouseEvent("click", true, true,  
  19. //                             title.ownerDocument.defaultView,  
  20. //                             1, 0, 0, 0, 0,  
  21. //                             false, false, false, false,  
  22. //                             0, title);  
  23. //        title.dispatchEvent(event);  
  24.     }  
  25. }, false);  
// ==UserScript== // @author F.Ko-Ji // @name Google Reader Auto Read Ads // @namespace http://blog.fkoji.com/ // @description This script click entries whose title "PR: " automatically // @version 0.3 // @include http://www.google.*/reader* // @include https://www.google.*/reader* // ==/UserScript== document.body.addEventListener("DOMNodeInserted", function(e) { var element = e.target; if (!element.className.match(/^entry/)) return; var title = element.getElementsByTagName("h2")[0]; if (title.textContent.match(/^(PR:|AD:|\[PR\])/i)) { element.style.height = 5; // var event = title.ownerDocument.createEvent("MouseEvents"); // event.initMouseEvent("click", true, true, // title.ownerDocument.defaultView, // 1, 0, 0, 0, 0, // false, false, false, false, // 0, title); // title.dispatchEvent(event); } }, false);