「Firefox 22.0 のドラッグ・アンド・ドロップで、なんか変な挙動」で述べた「ドロップハンドラーで例外が発生するとページ遷移する」現象は、バグとは断定できないものです。
ブラウザウィンドウに、ファイルマネージャーなどからローカルHTMLファイルをドロップすると、そのHTMLファイルが表示されることは自然です。同様に、Webリソースを指す一種のシンボリックリンクがあったとして、それをブラウザウィンドウにドロップしたら目的の(シンボリックリンクが指す)ページが表示されるのも望ましい動作でしょう。
Firefoxが引き起こすページ遷移は、そういう背景があるんじゃないかと想像できます。しかし、例外のたんびにそれをやられると迷惑なんですよね。ドラッグイベントが伝搬して最後に流れ着いた先の動作としてページ遷移が起きるんだろうから、event.stopPropagation() で伝搬を止めればいいだろう、と。いやっ、ダメですね、効果なし。
ということは、伝搬した先じゃなくてドロップターゲットの要素のデフォルト動作がページ遷移? event.preventDefault() したらページ遷移はなくなりました。僕が使ったドロップターゲットはp要素だったことを考えると、たいていの要素でページ遷移しそうです。
ウーム。ドロップのデフォルト動作の背景が先に述べたようなことだとしても:
- たいていの要素のデフォルト動作がページ遷移である必要があるのか? バブリングした先のどん詰まりでの動作ならまだ分かるが。
- ハンドラーがエラー(例外)したときも、デフォルトの動作を起動すべきか? かえって事態をややこしくすると思う。
と、納得できん。