blip.fmのplaylistで一番下までスクロールしないと曲が再生されない原因を解明した

blip.fmのplaylistがバグっているので原因を探ってみた - Cherenkovの暗中模索にっきの続きのエントリー。
これはWindowsプラットホームのFirefox限定の問題らしい。

Firefoxは表示領域外にあるflashレンダリングしない。新しくタブを開いたときや、ページをスクロールしてflashが貼られているエリアにきた段階で初めてレンダリングされる。(例えばyoutube動画がembedされたページ

ということは、playlistのswfは一番下にあることが原因で、一番下までスクロールしないとコントローラが表示されないのではないのか。ということを思いついた。

確認してみる

firebugを使ってswfが埋め込まれているobjectタグを探すだけ。DOMでoffsetTopをよくみる。

http://blip.fm/profile/cherenkov/playlistで以下のスクリプトを実行してみる。

var left = document.getElementById('blipPlayer').offsetLeft;
var top = document.getElementById('blipPlayer').offsetTop;
//swfが埋め込まれている座標 (X,Y)
console.log(left+','+top);
//0,12482 と出力された。

おお!やっぱりめちゃくちゃ下に位置している!次は正常に表示されるトップページ(http://blip.fm/home)と比較してみた。以下の表にまとめた。

PAGE swfの座標(x,y)
top 598,80
playlist 0,12482

ぬおお!swfの位置が原因ということで間違いない!
試しにFirefoxの横幅をせまくしてからトップページを開いてみるとコントローラが表示されないことを再現できる。

原因まとめ

Firefoxはobjectのwmodeにtransparentが指定されている場合、表示領域外にあるflashレンダリングしない。
よって、blip.fmのplaylistはswfが一番下に埋め込まれていたのでswfがレンダリングされず、コントローラはずっときっかけ待ちだった。
これはwindows環境のfirefoxに限られた現象でそのうち対応すると返答がきた。
マックだとどこで挙動がかわるんだろう。wmode:transparentのところ?報告求む。

感想

このひらめきは、島木譲二のwikipediaでネタを眺めているときに訪れた。なんというセレンディピティ

あたらしい開発手法を発見したのかもしれない。
よしもとクリエイティブ法(略称 YC法)としておく。