後から追加される特定の要素に対して処理をする
ページロード時にはなくてその後 addon とかで自動的に追加される要素に対して処理したい場合どうしようと思っていろいろやってみた結果。ていうかまぁ Mitter toolbar が仕込む div 要素のことなんだけど。とりあえず setTimeout 使って落ち着いたあたりで処理するようにすればいいのかなと思ったんだけど addon のロード順が不定みたいで成功する時もあれば失敗する時もあったのでどうすんべという状況。普通に該当要素が見つかるまで setInterval で回せばいいかなと思ったんだけどそうすると Mitter toolbar をいれてないときにずっとチェックするハメになるのでちょっと考えて以下のようにした。
var count = 0; var id = setInterval(function () { var e = document.getElementById('mitter__container'); if (e) { e.style.display = 'none'; clearInterval(id); } if (++count > 10) { clearInterval(id); } }, 10);
Greasemonkey から XPCOM をたたくことができれば about:config 見に行って Mitter toolbar が入ってるかチェックもできたんだけど無理なので 100 msec の猶予を持たせるという安定性のない策を取らざるを得なかった。これ環境によっては働かないこともあるわけだよな…。その場合は単純に猶予時間を伸ばせばいいのかしら。
余談だけど最大化時に横にサイドバーが出てしまうので Mitter のような可視要素の埋め込みは副作用がないかよく考えた方がいいなぁと思った。これがあったので give me controll !! ( http://d.hatena.ne.jp/janus_wel/20081010/1223664184 ) 書く時も自前で要素埋め込むのを悩んだんだけど不可視要素だとそんなに影響ないかなぁと思って踏み切った形。まぁ使わせてもらってる身でこういうことするのは自分でもアレだと思ったんだけど邪魔でしかなかったので。