doodle開発記 石丸健太郎

子供の転地療養のため住み慣れた東京を離れ湖と山に囲まれた諏訪の地にて21世紀的なワークライフバランスのあり方を模索中。GPSケータイとGoogleMapsを連携させたマッシュアップサイト「doodle」を中心に、関連サービスの開発日記を綴ります。

2009年02月06日

JavascriptからJavascriptを吐き出すときには注意しよう

気温は低いのですが今年は雪がほとんど降らない諏訪です。でも山の上のスキー場は雪がどっさりあるので実に十数年ぶり?!に毎週末通っています。(子供のソリですが・・・(^^;;

さて、なんだかヘンテコなタイトルですが、結構ハマっていた問題が解決したので備忘録として残しておきます。

JavaScriptでdocument.write('<script type=text/javascript>・・・');てな感じでJSからJSを吐き出して表示させるプログラムを書いていたのですが、なぜかその中に書いた関数が一向に呼び出せない(not definedが返る)で、ずっと困っていました。

ロジック的にはどこにもエラーはなく、もちろん単体を切り出して実行すればすんなり動くしで、ほとほと困り果てていたわけですが、先週なにげにこの方に相談したところ、彼の経験値であっさりと解決しました。

よくJavaScriptを書くときは、それを読めないブラウザのために(ってこの時代もうほとんどないと思いますが(^^;;)

<!--

-->

でHTML的にエスケープするのが慣例として残っているわけですが、これを

document.write('<!--');

一切改行コードなしに出力してしまうと、document.writeした内容そのものがすべてエスケープされてしまい、関数が見えない(スコープ外になってしまう)という現象のようです。(HTMLやJavaScriptは改行コードとは無縁のはずだからバグ?)

ちなみに<!--の代わりにCDATAセクション(<![CDATA[)にしても結局「!」でエスケープされてしまうからなのか、結果は同様に動かないので、データ中に改行コードも付加するか、もしくは、document.writelnを使って明示的にJavaScriptとして改行コードを付加すると動いてくれます。

そもそもそんなコードは書かないと思っている人は無関係・・と思いがちですが、ことはそう単純ではないと思います。

マッシュアップサイトを作る場合でなくても、いまやデータ取得はAPI経由でXMLやJSON(P)でやり取りするケースが多いかと思いますが、データを読み込んだ際にデータ中に<!--やCDATAセクションが存在する可能性も充分にあるわけで、それをJavaScriptで吐き出すロジックも決してレアではありません。その際に余計な改行コードを除去するロジックなどを処理系側でいれてしまっていたりすると思わぬところでハマったりします。

ちなみにこの問題もFireBugでメモリ上のロジックを可視化できたからすぐに検証できたともいえますが、

「見えるか見えないか」はFireBugのデバッグコンソールから

alert(hoge);

のような感じで確認・検証はできるものの、それが「なぜ見えないのか」まではわからないわけです。

FireBugは便利ですが、いくらロジックを追っても解決しない問題は、やはり長年の経験値がものを言うんだなと改めて感じました。


ちなみにFireBugのプラグインでFirecookieというのがあります。これすごく便利ですので入れておいて損はないです。

FireBugをもってしてもcookieの内容まではリアルタイムには追えないわけですが、これがあると今までキャッシュをわざわざ確認しなければ可視化できなかった内容がリアルタイムでつかめます。こんな感じです。

firecookie.jpg


特にAjaxなコードで何らかの状態をcookieで制御するようなコードを書いている場合、「今」どんな値なのかだけではなく、更新処理で値が変わる「前」と「後」のデータをリアルタイムで追えるのか追えないのかでデバッグの効率がだいぶ変わってきます。

さらにFirePHPというプラグインもあるのですが、これはまだ試していません。なんでもPEAR経由でサーバ側にデバッグコードをヘッダに埋め込めて、それをFireBugで確認できるようです。

Extのフロリダトレーニングのときに、向こうの講師はデバッグをすべてFireBug上で完結させていましたが、さすがにサーバ側ロジックは無理だろうと思っていたのですが、これがあることでほぼクライアント側だけで済んでしまうことになります。

もはや「コード直してFTPしてリロードして試して・・・」なんてフローは完全にオールドスタイルになってしまったんだなと痛感しますね。お恥ずかしながら・・・(><)

posted by けひん at 09:04| 長野 | Comment(0) | TrackBack(0) | ハマリ道 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/113751184

この記事へのトラックバック