WebAbornを、AutoPagerizeでも動作するようにしたい
WebAborn (ウェブあぼ〜ん http://ai11.net/software/webaborn/) は、Webページに表示される特定の文字列を「あぼーん」(見えない文字列化)するソフトだ。
AutoPagerize (オート・ページャライズ http://www.forest.impress.co.jp/article/2008/01/16/autopagerize.html) というソフトは、Webページの「次のページ」をクリックしなくても、下にスクロールするだけで勝手に現在のページの下部に次のページを読み込んでどんどんつなげてくれる、便利なソフトだ。
ここで問題がある。AutoPagerizeで読み込んだ2ページ以降では、WebAbornが効かないのだ。
画像のとおり、NGワード(ここでは「あいう」)をあぼーんできているのは最初のページだけだ。
これでは、せっかくWebAbornで見たくない文字列を不可視化しようとしたのに意味がない。AutoPagerizeを使用しなければとりあえず解決するが、AutoPagerizeはとても便利なので今後も使用したい。
何とかしたくて調査してみた。
AutoPagerize対応のWebページを作る方法は google:autopagerize 対応でわかった。
テストページを作成した。
http://ai11.net/2009/misc/test_autoPagerize_1.html
AutoPagerizeにWebAborn機能を追加する方向で修正を試みた。
C:\Documents and Settings\xxx\Application Data\Mozilla\Firefox\Profiles\xxx.xxx\gm_scripts\autopagerize\autopagerize.user.js を以下のように修正(文字コードUTF-8Nで保存)すると、動いているようなのだが……。
--- autopagerize.user.js.org Wed Apr 8 14:24:24 2009 +++ autopagerize.user.js Wed Apr 8 23:23:55 2009 @@ -684,6 +684,29 @@ } AutoPager.documentFilters.push(linkFilter) +var webAbornFilter = function(doc, url) { + var urlRegex = /(あいう|えおか|きくけ)/; + var abornString = '\u3042\u307c\uff5e\u3093'; //あぼ〜ん + var allowedParents = [ + "a", "abbr", "acronym", "address", "applet", "b", "bdo", "big", "blockquote", "body", + "caption", "center", "cite", "code", "dd", "del", "div", "dfn", "dt", "em", + "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6", "i", "iframe", + "ins", "kbd", "li", "object", "pre", "p", "q", "samp", "small", "span", "strike", + "s", "strong", "sub", "sup", "td", "th", "tt", "u", "var" + ]; + var xpath = "//text()[(parent::" + allowedParents.join(') or(parent::')+")]"; + var candidates = getElementsByXPath(xpath, doc); + var cand=null; + candidates.forEach(function(cand) { + if (urlRegex.test(cand.nodeValue)) { + var span = document.createElement("span"); + cand.parentNode.replaceChild(span, cand); + span.appendChild(document.createTextNode(abornString)); + } + }) +} +AutoPager.documentFilters.push(webAbornFilter) + if (typeof(window.AutoPagerize) == 'undefined') { window.AutoPagerize = {} window.AutoPagerize.addFilter = function(f) {
1ページ目ではWebAborn、次のページ以降は改良したAutoPagerizeを使うことで、以下のようにすべてのNGワードをあぼーんできた。
しかし、WebAbornとAutoPagerizeの2つに同じNGワードを登録するのは、ムダという感じだ。AutoPagerizeに一体化させることはできないかな?
…だが一体化させると、AutoPagerize無効のページ
(以下のページはデフォルトでAutoPagerize無効になっている)
// @exclude https://mail.google.com/* // @exclude http://b.hatena.ne.jp/*
で、WebAbornが動作しないということになってしまう。やっぱり別々のスクリプトのままでいいかな。
追記 2009/4/10
WebAbornのページで、AutoPagerize(WebAborn機能つき)をダウンロードできるようにした。
http://ai11.net/software/webaborn/#autopagerize
追記 2011/01/07
WebAbornバージョン6からは、AutoPagerizeで読み込んだ2ページ以降にもWebAbornが効くようになった。
以下の記事で紹介している。
http://d.hatena.ne.jp/itouhiro/20110107