FirefoxのアドオンAdblockでWebメールが真っ白に
先日、So-netのWebメールでSo-netから届いたメールに記載されたリンクをクリックした時にメールの本文が消えた。クリックしたURLは http://mailcenter.so-net.ne.jp/ で始まっていた。クリックしたら他のURLをクリックした場合と同様に新しいウィンドウが開いた。私の場合は新しいタブで開くように設定してあるが、その新しいタブの内容は次のようなものだった。
別のページにジャンプさせる仕組みだと思って最初は気にしてなかった。待ってもジャンプしなかったがFirefoxのアドオンBlockSiteかAdblockでブロックされているからだろうと気にしなかった。しかし、Webメールに戻るとメールの本文が消えていて、再表示させようとしても方法が見つからず、リンクをクリックしたメール以外のメールまでも本文が表示されなくなってしまって焦った。
原因が分からず、とりあえずWebメールのページを再読み込みして、Adblockを無効にしてからクリックしてみたら問題は生じなかった。Adblockが有効なままでも、Ctrlキーを押しながら左クリックしたり、マウスのホイールをクリックしてリンク先を開いた場合は問題なかった。Adblockを有効にして単独の左クリックで開く「オブジェクトは移動しました」と表示されているページのソースは、Ctrl+左クリックの時に表示されるサイトのものだった。
いろいろと考えた後に、ふと「オブジェクトは移動しました」の下の「このオブジェクトはここ」の「ここ」をクリックしてみた。Ctrl+左クリックの時と同じ新しいページにジャンプした。メール本文は復活しなかったが、「ここ」のURLが気になって確認してみた。http://ad.scadnet.com/ で始まっていた。「ad.」が付いているサイトの画像などはAdblockでブロックしているはずである。フィルタを確認したら「http://ad.$~object-subrequest,~other」があった。この設定を無効にしたらAdblockが有効なままでも問題が生じなかった。
翌日にYahoo!メール(ベータ版)で実験したら同じトラブルが生じた。こちらはページ全体が真っ白になってしまった。Yahoo!メールの旧バージョンなら生じない。本文表示のためにJavascriptを使っているWebメールで生じるトラブルではないかと思ったので、同じようにJavascriptを使っていそうな「Infoseek メール Beta」でも試してみた。メール本文が消えたりWebメールのページ全体が消えたりはしなかった。それならば、So-netのWebメールもYahoo!メール(ベータ版)も問題が生じないように改良できるはずである。
Adblockはページ内に広告などを表示させないアドオンであり、サイトへのアクセスを妨害する仕様ではないだろう。それならば、リンク先をWebメールと同じウィンドウの同じフレーム内に表示する仕様に問題があるのではないかと考えた。しかし、リンクしたURLの部分のソースを見たら「target="_blank"」が記載されている。同じウィンドウに表示するのではなく新しいウィンドウを開いて表示するはずで、そもそも「オブジェクトは移動しました」のページは新しいウィンドウに表示されている。Webメールの仕様に問題があるのかAdblockに問題があるのか分からなくなった。
この不具合は「Firefox 3.6.13」と「Adblock Plus 1.3.3」と「So-netのWebメール」あるいは「Yahoo!メール(ベータ版)」を同時に使っているときに生じた。Javascriptを使ったWebメールの構造は複雑だろうから、それらのWebメールを使わない再現実験は難しいだろうと思った。しかし、再現できるソースは簡単に作れた。Javascriptは使っていない。インラインフレーム(iframe)を使っているだけである。インラインフレームを使ったソースで実験する前に普通のフレームを使ったソースを作って実験した。アップロードしたので「Firefox 3.6.13」と「Adblock Plus 1.3.3」を同時に使っている人は次のサイトにアクセスすればフレームやページ全体が消える不具合を体験できる。試して欲しい。
- インラインフレームの一部が消えるケース
(So-netのWebメール風) - ページ全体が消えるケース
(Yahoo!メール(ベータ版)風) - 普通のフレームを使ったケース
(消失したフレームは境界線のドラッグで現れる) - 普通のフレームを使ったケース
(noresizeを設定して境界線のドラッグを不可能にした)
それぞれのサイトには「target="_blank"」を使ったリンクと使わないリンクを用意してあるが、Adblockで「http://ad.$~object-subrequest,~other」というフィルタを有効にしている場合、どちらもフレームが消える。Adblockが「target="_blank"」を無視しているのだろうか。
ところで、Adblockのフィルタの記述に関してはAdblock Plusのサイトの【Writing Adblock Plus filters】に書いてある。
私の乏しい英語能力で解釈したところ、「http://ad.$~object-subrequest,~other」の「$」は各フィルタのオプションを記述する前に付けるようである。「~」はフィルタを適用しない例外の前に付けるようである。「object-subrequest」は「requests started plugins like Flash」とあり、フラッシュのようなプラグインの開始に関係していそうである。「other」は「types of requests not covered in the list above」とあり、各オプションのどれにも当てはまらない場合に適用するようである。要するに、「http://ad.$~object-subrequest,~other」はフラッシュ以外のほとんどのケースで「ad.」で始まるドメインに存在する画像などのファイルを無視するようである。嬉しいフィルタである。しかし、「http://ad.」で始まるURLへのリンクをクリックした時にリンクが存在するページまで消してしまう仕様は変である。「target="_blank"」で新しいウィンドウを開くようになっている場合は新しいウィンドウ内に表示しなければ良いはずである。私が確認したのはバージョン「1.3.3」である。アップデートされて改善されるか注目したい。アップデートされる度に、上の実験サイトで確認したい。
コメント 0