■
Adblock Plus で Amazon の「ショッピングカートに入れる」ボタンが
消されてしまう。由々しき事態だ。
というわけで解決させる。
まず、ボタンの 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