ネットインデックスのサイトをOperaで表示した際の問題について
Friday, July 14, 2006 7:02:03 PM
IEやFirefoxでは普通に表示されるが、Operaだと枠がどんどん増えていってファン全開。JavaScriptオフだと他ブラウザと同じように表示されることから、OperaのJavaScript処理が変なのか、サイトのJavaScriptがマズイのかどっちかだと思う。
window.addEventListenerの第三引数がtrueになっている場合にloadイヴェントが何度も繰り返し呼ばれているみたいです。たぶんOperaのバグだと思います。
とりあえず、こんな感じのUser JavaScriptで回避できます。
// ==UserScript==
// @name Fix netindex addEventListener problem
// @author Satoru Watanabe
// @namespace http://my.opera.com/watanabe/
// @version 1.0.0
// @include http://www.netindex.co.jp/customer/download/
// ==/UserScript==
(function() {
opera.defineMagicFunction('addEvent', function () {
window.addEventListener('load', initcorner, false);
return true;
});
}) ();
Fix netindex addEventListener problem
追記: 2006-07-15 18:00 (JST)
芦塚さんにバグレポートしていただきました。多謝。
昨晩は焼酎を三合くらい飲んで意識が朦朧としていたのであまり検証できなかったのですが、ちゃんとテストしてみると、どうもHTMLファイル内で外部CSSを読み込む際にその都度loadイヴェントが呼ばれているため上記の現象が起きているようです。
テストページを作ってみました。Opera addEventListener test
ダイアログが一度だけ表示されるのが正しい振る舞い(のはず)です。
追記: 2006-11-08 02:00 (JST)
(略) document(とかwindow)で「キャプチャあり(addEventListenerの第三引数をtrue)」でloadイベントリスナを登録する、ってことは画像とかのloadイベント*1を捕獲するということなんだから、そのdocumentのloadイベントリスナが(1回しか実行されないだろう、という考えに反して、画像とかのloadイベントの回数分)たくさん実行されるのは仕様通りの動作だよ、Gecko(Firefox)とかSafariの実装が変だよ、ということらしい。
Operaがキャプチャありのloadイベントリスナを何回も実行するのは仕様通りの動作 - d:id:quaa
なんてこったい。上記の振る舞いはバグではなく仕様通りの正確な動作だとの事です。
テキトーな事を書いてすみません。特に芦塚さん、ごめんなさい。

Asizuka # Saturday, July 15, 2006 6:35:03 AM
取り敢えず、そのUserJSをいただきました。あと、バグレポしておきました。