16:18去年の9月ごろに書いていたのだけど、ほかに書くことを書いて順を追って公開しようと思っていたら寝かせすぎた...。msWWAがMSAppにかわってたりしたのでその辺を修正して公開。10が持つ機能でローカルアプリケーションを実装できます。ローカルアプリケーションとして動くということで通常のブラウザの機能だけでなくネイティブの機能を利用できるようになっています。それと同時に仕様やセキュリティ上の理由で一部の機能に制限がもうけられています。appでは新規ウィンドウ作成、ウィンドウ位置変更など各種ウィンドウ操作は行えません。ウィンドウ操作にはダイアログも含まれます。具体的には以下のメソッドが影響を受けます。alertpromptopenmovebymovetoresizebyresizetoだだし例外的にアプリケーションからはwindow.closeは実行できます。window.closeはアプリケーションの終了と同じですが基本的には使うべきではないとされています。利用すべき場面は復帰できないエラーが発生した場合に強制終了するといった使い方です。javascriptスキームa要素のjavascriptスキームは動作しないようになっています。これはあまり困りませんね。解決策DOMのclickイベントや直接書きたい場合にはonclick属性を利用するように書き換えます。HTMLを渡して出力したり要素を生成したりできます。appの場合にはinnerHTMLなどに渡すことのできるHTMLに制限がかかります。以下のようなコードを実行しようとします。false);</script>すると実行時に以下の例外エラーが発生します。useこれはinnerHTMLなどのプロパティやメソッドに渡すことのできるHTMLはセキュリティ上静的なもの(安全なもの)となっていることが求められているためです。静的でないHTMLというのはscript要素やonなんとか属性、form要素などのスクリプト等の動的な要素をふくむもののことです。いうscript要素をはじめとして動的・未知の要素・属性をサニタイズをするメソッドを通るものです。titleにそのリストがあります。svg要素なども通らないので注意が必要です。この制限は外部からデータを読み込んでそのままアプリケーションに流し込んだ際、悪意あるスクリプトを実行してしまうのを防ぐためにあるものと思われます。appはローカルアプリケーションなのでコンピュータへのアクセスが行えるようになっていて、たとえばファイルを操作するようなスクリプトを含んだHTMLをinnerHTMLで差し込んでしまうとそのローカルアプリケーションの一部として実行されて困ったことが起こる、といった感じですね。innerHTML以外にも以下のメソッドやプロパティにこの制限のかかっています。document.createElementを利用するinnerHTMLなどを使わずcreateElementで要素を作ってごく普通に内容をセットしていく方法です。この場合自前でHTMLをパースしない限りは悪意あるスクリプトを取り込んでしまうことはなくなります。逆に自前でHTMLをパースしてしまうと潜在的に危険なものも組み立ててしまう可能性があるので注意が必要です。window.toStaticHTMLを利用してサニタイズするinnerHTMLなどが受け取って安全とされるものはwindow.toStaticHTMLを通ることを許可されている要素や属性、ということなのでtoStaticHTMLメソッドを利用してサニタイズしてしまいます。href="#">Link</a>');document.body.appendChild(divE);toStaticHTMLで静的となったHTMLであればinnerHTMLにセットしてもエラーとならなくなります。安全ではない操作として実行する「安全ではない操作を実行する」方法も用意されています。これはinnerHTMLなどに安全ではないHTMLをセットしても動く、普通のIEと同様の挙動を実現する方法です。同様の挙動といっても「安全ではない操作」単位での実行となるのでコードを若干修正する必要があります。安全ではない操作の実行にはwindow.MSAppに存在するexecUnsafeLocalFunctionメソッドを利用します。execUnsafeLocalFunctionメソッドは引数に関数をとり、その関数を実行している間は各種のチェックが無効となります。以下のようなコードで動くようになります。false);</script>この方法は信頼されている、たとえばアプリケーションのローカルリソースを読み込んでのようなデータを差し込む場合にのみ利用すべきです。Studioなどテンプレートからアプリケーションを作った場合についてくるWinJSライブラリに以下のヘルパーメソッドとして用意されています。Previewで変更されて即座にエラーとなるようになりました。この制限のわかりにくいポイントの一つとして、要素がドキュメントに追加された際にエラーが発生するというところがあります。以下のコードで実際エラーが発生するのはdocument.body.appendChildのタイミングとなります。false);</script>innerHTMLをセットした瞬間ではないのでjQueryを使っている場合などjQueryの内部で突然エラーが発生して悩むことになることがあります。ExplorerzshWebKitMetroWinRTWinJSリンクMisuzilla.orgぷろじぇくと、みすじら。