うっかり備忘録: JavaScript で受け取るイベントの座標情報
最近やっているJavaScript講座用にと、Girlsなんてちょっと中二病を催して付けた名前のJavaScriptアプリがあるんだけど、そいつのモックアップにクライアントサイドの動きを実装していた時の事。
■ありゃ・・・GirlsのモックアップにHTML5的なドラッグアンドドロップで案件の移動を実装できたと思っていたはずだったが・・・Chromium18でしか期待通りに動かないなコレ。Fx11でも動いてくれないとカナシイなあ。
HTML5のドラッグアンドドロップAPIを使ってみた部分なので、ブラウザー間の実装差だろうかとうか思ってみた。しかし問題は新しいドラッグアンドドロップの為のAPIの使い方ではなくて、古くからのブラウザー間のイベントにおける座標取得なのでした。マウス関連のイベントを拾うとマウスの座標を読み取れる訳ですが、これがウェブブラウザー毎にちまちまっと違うんですよねー。
// test // C: Chromium-18 // F: Firefox-11 // O: Opera-next-12.00a e.x // C O e.pageX // C F O e.layerX // C F e.clientX // C F O e.screenX // C F O
今回はChromiumでデバッグしながら作っていて、うっかり座標取得に`event.x`と`event.y`を使ってしまっていたところがあった為に、FirefoxでGUIの挙動があるぇーって事になっていたのでした。うっかり備忘録☆(ゝω・)vキャピ
おまけ: なんかTwitterでぼやいてたコトのメモ
だから結局のところ、ブラウザーが言語処理系を同梱で実装してるってのが可笑しな話なんですよ・w・ エンジン選択の自由をユーザーに簡単に提供すべき。
— 伊藤 兎 (実際にんじん)さん (@USAGI_WRP) 4月 8, 2012
■もちろん、ブラウザーはスクリプト処理系は何か1つだけ組み込みでサポートとかすべきじゃなくて、ユーザーは任意の処理系をプラグイン式に簡単にブラウザーへインストールしたりアンインストールしたりできるべき。
■プラグインの仕様を満たしてさえ居ればウェブブラウザーはDOM操作やイベント等のAPIをプラグインに提供し、プラグインはそのプラグインが満たす言語仕様に基づいてスクリプトを実行するエンジンを提供すればいいじゃない・w・
■プラグインは何もネイティブ以外にもABI的な仕様を提供してCで書かれた本物のバイナリのプラグインでもPythonなりRubyのレイヤーでもブラウザーのAPIに接続できるように複数のネイティブレベルのレイヤーを設ければ誰も困るまい?
■ウェブブラウザーはレンダリング等の実装に特化してスクリプト処理系は完全に分離できる状況というのは、巨大な産物になっているブラウザーにも良い事だと思うんだ。もちろんスクリプト開発者にも、エンドユーザーにも。
で、そうしたら<script type="application/haskell">とかもきっと自由に出現する様になるだろうし、きっと楽しいと思うだソレ。
— 伊藤 兎 (実際にんじん)さん (@USAGI_WRP) 4月 8, 2012
うーん、実はコレかなり大真面目に思ってたり・w・