Adblock PlusAmazon の「ショッピングカートに入れる」ボタンが
消されてしまう。由々しき事態だ。

というわけで解決させる。

まず、ボタンの URL を調べる。このボタンをカートボタンと呼ぶことにしよう。

http://images-jp.amazon.com/images/G/09/x-locale/detail/buy-box/add-to-cart-notched.gif

つぎに、現在の Adblock Plus で表示を止めているリストを調べる。

...このリストをテキストでコピーできないのはなぜだ。なぜコピーメニューが
無効にされるのだ。

...と思ったら、「Adblock を有効にする」のチェックボックスを On にしたら
選択できるようになった。こんな制限をつける必要はあるのだろうか?

まあいいや。リストはこれだ。初期値のまま、変更していない。

.directresponse.com
.falkag.net
/[.\/]intellitxt[.\/_]/
/[\W_](blog|get|online)ads?[\W_]/
/[\W_](double|fast)click[\W_]/
/[\W_]ad[^=&](banner|click|flow|frame|ima?ge?|log|serv(er|e)?|stream|type|view|vert(ising|isement)?|v|js|trix|xchange|wrapper)?s?[\W\d_]/
/at(wola|dmt)\.com/
geocities.com/js_source/

さて、どれが Amazon のカートボタンに該当するのだろうか?

明らかに違うのは、以下。ぜんぜん違う単語が含まれているからね。

.directresponse.com
.falkag.net
/[.\/]intellitxt[.\/_]/
/[\W_](blog|get|online)ads?[\W_]/
/[\W_](double|fast)click[\W_]/
/at(wola|dmt)\.com/
geocities.com/js_source/

となると、あやしいのは、これしか残っていない。

/[\W_]ad[^=&](banner|click|flow|frame|ima?ge?|log|serv(er|e)?|stream|type|view|vert(ising|isement)?|v|js|trix|xchange|wrapper)?s?[\W\d_]/

これをいったん削除してみようか。

...正解。Adblock を有効にして Amazon のページを再表示したら、今度はボタンが
表示された。

実験からは成功とわかったけど、理論からはまだ確証が取れない。
上のリストは正規表現だと思うけど、ほんとうに該当するかな?

フィルタ: /[\W_]ad[^=&](banner|click|flow|frame|ima?ge?|log|serv(er|e)?|stream|type|view|vert(ising|isement)?|v|js|trix|xchange|wrapper)?s?[\W\d_]/
URL: http://images-jp.amazon.com/images/G/09/x-locale/detail/buy-box/add-to-cart-notched.gif

あやしいのは、"ad" だ。ここから始まる正規表現が add-to-cart-notched.gif に該当しているのだろう。

ほんとうかな? フィルタから、明らかにマッチしない箇所を削除する。

まず、色々な単語がパイプ '|' ではさまれた括弧は、あきらかに該当しない。
ところがこの括弧は '?' で終わっているため、なければないで構わないわけだ。
というわけで、この括弧を削除してみる。

フィルタ 2: /[\W_]ad[^=&]s?[\W\d_]/

s? も '?' で終わっているため、なくても構わない。

フィルタ 3: /[\W_]ad[^=&][\W\d_]/

\W は英数字*1でないもの。URL で "ad" の前にあるのは '/' だ。これでも該当するわけだ。

[^=&] は '=' と '&' とを除いた、ほかのすべての文字。'd' でもいい。よって "/add" まで
該当した。

[\W\d_] は \W か \d か '_' のどれか。\d は 0 から 9 までの数字。
'_' はアンダーバーそのもの。

ということは、"/add-" まであてはまったわけだ。はい、フィルタ実行。
Amazon のカートボタンは表示されなくなる。

さて、対策だけど。

このフィルタを消せば Amazon の問題は解決する。でも、削除したほうが
いい画像も表示されるようになる。Amazon だけ表示を残して欲しい。

となると、"add" は対象外となればいいわけだ。
"ad" のつぎが 'd' だったら、対象外にしたい。

ad[^=&] を ad[^=&d] にすればいい。[^...] は、... の箇所に
指定された文字を「含まないもの」に該当する。つまり [^a] なら
a 以外のすべての文字だ。

...はい、正解。Amazon のカートボタンは表示されるようになった。

修正おしまい。つぎは、はてブの「このページを追加」が消える件の対処でもしようかな。

と思ったら、今日の修正ではてブの問題も治った。

「このページを追加」の URL は以下。

javascript:window.open('http://b.hatena.ne.jp/add?mode=confirm&is_bm=1&title='+escape(document.title)+'&url='+escape(location.href),%20'_blank',%20'width=520,height=600,resizable=1,scrollbars=1');undefined;

"add" が含まれているから、表示されなかったんだね。やれやれ。Adblock Plus の初期値がこんなでいいのかな。add なんて、とくに通販サイトでは結構使いそうな気がするけど。

*1:2005/12/20 追記: まちがって空白と書いてました。空白でないものは \S