2012年6月16日土曜日

[WinJS] CP版の Metro Style アプリをRP版に移行する時のメモ

Javascriptで作っていたメトロアプリが案の定動かなくなったので、その時の移行のメモです。
動的言語なので、オブジェクトの中身が変わっていても実行時にしかわからないのが痛いですね。
CP版のVS11で作成したアプリを、RP版のVS2012でビルドしなおす場合を想定しています。

(1) WinJSの参照をやり直す
CP版は0.6だったのですが、1.0.RCというバージョンになっています。
なので、一度参照を削除して再度追加してやる必要があります。



(2) default.htmlの参照を修正する
下記のように、WinJSへの参照の部分を、Microsoft.WinJS.0.6からMicrosoft.WinJS.1.0.RCに修正します。WinJSの参照をしなおしただけでは、自動で変わりませんので注意してください。


(3) RC版での変更に対応する
ビルドしただけでは分かりませんので、基本的には実行してみてエラーになった個所を潰していく感じになると思います。

Consumer Preview 以降のアプリ開発者向けの変更点
http://blogs.msdn.com/b/windowsappdev_ja/archive/2012/06/07/consumer-preview.aspx

移行ガイド (英語)
http://go.microsoft.com/fwlink/?LinkID=251943


(4) WinJS.xhrでHttpWebRequestを行っていた場所を見直す
前述の移行ガイドでも見当たらなかったのですが、responseXMLの型が変更になっているみたいです。CP版の場合は、MSXMLに由来するMS独自拡張のselectNodesやselectSilgleNodeでXPath式を使って操作ができたのですが、RP版では変更(削除)されたようです。なので、これらを使っているプロジェクトの場合、実行時にエラーになります。

解決方法としては、新たにSelectors APIが使えるようになっていますので、querySelectorAllとかquerySelectorを代わりに使います。こちらは引数がCSSセレクタですので、XPath式からの書き換えも忘れずに。

例えば下記のように書き換えます。


item.selectSilgleNode("title").text; // CP版

item.querySelector("title").textContent; //RP版


Release Candidate: Did responseXML change at all? selectNodes isn't a method anymore...
http://social.msdn.microsoft.com/Forums/sv-SE/winappswithhtml5/thread/2141429b-b7d3-46ef-a46b-5919e41d454f