Dojoでは<a href="javascript:xx();">は御法度?

MMLコンポーサだが、Flashの描画にdojoxを使うようにするため、ナイトリービルドのdojoを使うようになってからIEの挙動が怪しくなった。なんと、ボタンを押すとフォーム全体が消えてしまうのだ。で、エラーログには「オブジェクトが見つかりません」と出る。この問題はかなりはまった。IE Developer toolのDOMブラウザをみると、やはりすべて消えている。おかしい。

そういえば、ナイトリービルド版では、ページを閉じるときにdojoで描画し直した部分の要素がすべて消えるという性質がある。おそらく、IEの持つメモリーリークの問題に対処するためだろう。しかし、ページを閉じているわけでもないのに全部消えるのはおかしい。最初は、DOMの取得関係の処理に問題があるのかと思った。

しかし、これまでデバッグが大変だったjavaScriptも、Dojo付属のFireBugである程度はマシになってきた。console.logという関数で関数の中身を確認できるのだ。で、DOMを一つ一つ確認してみると、getElementByIdでもgetElementsByNameでも問題なく取得できていることがわかった。また、すべてのフォームが消えてしまうとはいえ、どういうわけか再生ボタンは動くので、原因は他にあるように見えた。

で、もういちどソースを読んでみると、どうやら<a href="javascript:setNote('C');">ド</a>というようにjavascriptスキーマーを使ってJavaScriptを呼び出しているところでこの現象が起きていることに気がついた。そこで、JavaScript呼び出しに、すべてoclickに変更したところ動くようになった。。おそらく、DojoではIEでのメモリーリーク対策にhrefをオーバーライドしているのだろう。