requestにしました。そのまま使うだけでほとんど苦労はありませんでした。大変だったのは、クッキーを引き継ぐところでした。そもそもXHRを使わない場合も、jsdomはクッキーの引継ぎをサポートしていませんでした。XHRを使わない場合というのは、JavaScriptやCSSや画像ファイルなどを読み込む場合です。JavaScriptのロード時にもクッキーを引き継ぐようにするコーディングをしてから、XHRでもクッキーを引き継ぐようにしました。XHRはnode-XMLHttpRequestの内部のコードまで理解しなくてはならず、苦労しました。強引に実装したため、もしかしたら将来のバージョンのnode-XMLHttpRequestでは動かないかもしれません。v0.8.1がリリースされました。興味がある方はお試しください。もこのバージョンを使うように修正しました。requestにして欲しいと依頼されました。testを書いて欲しいということなので、書いてみたのですが動かなくて苦労しました。__defineGetter__と__defineSetter__を初めて使いました。ECMAScriptではこれらは入っていない(definePropertyを使う)そうですが、nodeでは__defineGetter__と__defineSetter__は使えるようです。結局、当初やっていた修正では全くダメ(なぜconnect-prerendererが動いたのか不明)で、window.locationまわりのコードを全部書き直しました。requestができあがりました。マージされたようで、めでたしめでたし。Issueが一つ残ってました。使ってくれそうな様子なので、ちょっとがんばってみました。#3で報告してくれた、http://stackoverflow.com/questions/10054071/jsdom-hashchange-eventと、jsdomの古いIssueのhttps://github.com/tmpvar/jsdom/issues/433でした。そもそも、hashchangeイベントの発火が実装されていないとのことでした。みようみまねでjsdomに手を加えて、コードを追加しました。結果、動くようになりました。不具合があれば誰か報告してくれることでしょう。dai-shi最近、connect-prerendererのIssueを報告してもらって、少しずつ不具合が見つかっては修正しています。うまく解決したのは、https://github.com/dai-shi/connect-prerenderer/issues/2https://github.com/dai-shi/connect-prerenderer/issues/5の二つ。ng-bind-templateで上書きしてしまう問題でした。<span>hoge</span></div>とコンパイル時になるように、Angular.jsをいじりました。CSSがそれを想定しない書き方だと、表示に不具合がでるかもしれません。後者は、doctypeがjsdomで消えている問題でした。こっちはすぐに直りました。手ごわく、まだ解決の糸口が見つかりません。以前書いた、jsdomからAngularJSの不具合二つ目の問題です。なんにしても、興味を持ってくれる人が増えるのはうれしいことです。connect-prerendererはほとんど宣伝していないのに、Star数が増えてきました。prerenderingというのがあるのですが、当分できそうにないので自分で作ってしまっています。https://github.com/dai-shi/connect-prerendererexpress.jsのmiddlewareで使うことを想定していますが、express.jsには依存しないようにしたので、connect-prerendererです。expressとconnectの違いは、他のブログなどでも説明されていることでしょう。何をやっているかを一言で言うと、サーバ側でjsdomを使ってJavaScriptを走らせて、レンダリング後のHTMLページをクライアントに返すというものです。基本的なところはしばらく前にできていて、簡単なテストケースは動いていたのですが、AngularJSを動かすのがなかなか大変でした。結局、angular.jsのソースに手を入れることになりました。AngularJSを使った簡単なテストケースも動いて、満足です。もってきてすぐ使えるようなライブラリではないですが、たぶん世界初の取り組みでしょう。あとははAngulaJS側でもっとうまく取り込んでもらわないとつらいところです。今は決めうち(ng-repeat="..."はOKだが、class="ng-repeat:..."は動かないとか)でやっている部分があるため。説明できずに意味不明かと思いますが、これにて。dai-shijsdomからAngularJSで作ったページにアクセスしたら、こんなエラーがでました。21"]]このエラーは"familiar"らしいです。現時点ではまだ解決されていない様子です。$routeProviderでredirectToを使うのを止めてみたらエラーが出なくなりました。dai-shihttps://github.com/dai-shi/connect-prerendererを開発中に出会った事象について書き留めておきます。angularが初期化されなくて困ってました。ぐぐったところ、AngularJSがIE8で動かないときはを見つけたのですが、この方法では解決せず。結局、次のようにしたら動きました。class="ng-app">id="ng-app"はあってもなくても変わらず。モジュールがある場合は、class="ng-app:<modulename>"でもうまくいくのかもしれません。});ってな感じで、どんな風に書いても動きそうです。id="ng-app"でうまくいかなかったのか疑問が残りますが、追求しないことにします。ng-appだけではダメだった理由は、ng-app="ng-app"に展開されてしまうからのようなので、ng-app="<modulename>"にすればうまくいくのかもしれません。結局、ng-app=""で動いたので、ng-appだけだとjsdomでうまくいかないというのは正しそうです。class="ng-app:<modulename>"もうまくいきそう。id="ng-app"で動かなかった理由はおそらく、ng-appが残っていたからでしょう。