さて、なんだかヘンテコなタイトルですが、結構ハマっていた問題が解決したので備忘録として残しておきます。
JavaScriptでdocument.write('<script type=text/javascript>・・・');てな感じでJSからJSを吐き出して表示させるプログラムを書いていたのですが、なぜかその中に書いた関数が一向に呼び出せない(not definedが返る)で、ずっと困っていました。
ロジック的にはどこにもエラーはなく、もちろん単体を切り出して実行すればすんなり動くしで、ほとほと困り果てていたわけですが、先週なにげにこの方に相談したところ、彼の経験値であっさりと解決しました。
よくJavaScriptを書くときは、それを読めないブラウザのために(ってこの時代もうほとんどないと思いますが(^^;;)
<!--
〜
-->
でHTML的にエスケープするのが慣例として残っているわけですが、これを
document.write('<!--');
で一切改行コードなしに出力してしまうと、document.writeした内容そのものがすべてエスケープされてしまい、関数が見えない(スコープ外になってしまう)という現象のようです。(HTMLやJavaScriptは改行コードとは無縁のはずだからバグ?)
ちなみに<!--の代わりにCDATAセクション(<
特にAjaxなコードで何らかの状態をcookieで制御するようなコードを書いている場合、「今」どんな値なのかだけではなく、更新処理で値が変わる「前」と「後」のデータをリアルタイムで追えるのか追えないのかでデバッグの効率がだいぶ変わってきます。
さらにFirePHPというプラグインもあるのですが、これはまだ試していません。なんでもPEAR経由でサーバ側にデバッグコードをヘッダに埋め込めて、それをFireBugで確認できるようです。
Extのフロリダトレーニングのときに、向こうの講師はデバッグをすべてFireBug上で完結させていましたが、さすがにサーバ側ロジックは無理だろうと思っていたのですが、これがあることでほぼクライアント側だけで済んでしまうことになります。
もはや「コード直してFTPしてリロードして試して・・・」なんてフローは完全にオールドスタイルになってしまったんだなと痛感しますね。お恥ずかしながら・・・(><)









