20

HTML/JS を使用して Windows 8 の開発を始めたばかりです。ここ数か月は、自動車のヘッド ユニットやテレビを対象とするアプリの jQuery 開発に没頭してきました。

これに飛び込んで、移行は簡単だと思いました。私は自分のサイトのデザインと構造の大部分を把握しており、以前の仕事で使用していたプラクティスのいくつかに従うことを望んでいました.

つまり、基本的に単一ページのアプリを作成したいと考えています。メインの default.html ファイルには、上部のナビゲーション/タイトルと、もう 1 つの div が含まれます。他の div は、プロジェクト内のすべての個別の HTML ファイルである他のすべてのページを読み込むために使用されます。

すべてのグローバル関数と主要な機能は、javascript ファイル application.js に格納されます。次に、ページ固有の JavaScript が各 HTML ファイルの先頭に配置されます。

これが問題だということはすぐにわかります。jQuery.load() を使用してページを読み込むと、アプリでセキュリティ エラーが発生します。

JavaScript ランタイム エラー: 動的コンテンツを追加できません。スクリプトが、安全でない可能性がある動的コンテンツ、または以前に動的に変更された要素を挿入しようとしました。たとえば、innerHTML プロパティを使用してスクリプトまたは不正な形式の HTML を追加すると、この例外が生成されます。toStaticHTML メソッドを使用して動的コンテンツをフィルタリングするか、createElement などのメソッドで要素と属性を明示的に作成します。

マイクロソフト特有のことをたくさん学ばなくて済むようにしたかったのです。彼らが多くのツールを提供してくれたのは素晴らしいことだと思います。おそらく私はそれらを十分に使用していないだけかもしれませんが、私と私がやろうとしていること、またはすでに達成できることに対して、すべてが硬直しすぎているように感じますjQueryで。私は、何が起こっているのかを正確に知り、それを完全に制御するのが好きな人です.

また、テンプレートとサンプル プロジェクトに目を通してみると、繰り返されるすべてのコードが本当に好きではありません。たとえば、すべて同じ参照を宣言するすべての HTML ファイル。タイトル バーなどの参照やセクションを 1 回だけ記述し、そのコードをプロジェクト全体にコピー アンド ペーストする必要がないようにしたいと考えています。

私が望んでいた方法で物事を行い、シングルページアプリを作成する方法はありますか? jQuery の .load() に代わる独自のものはありますか?

私を正しい方向に向ける助けがあれば、大歓迎です!

2012 年 8 月 14 日編集:

この質問の修正を使用してみました: Windows 8 Metro JavaScript アプリで jQuery を使用するとセキュリティ エラーが発生する

これにより、セキュリティ警告がなくなり、jQuery.load() を使用して HTML に読み込むことができます。ただし、DOM エクスプローラーを見ると、HTML からスクリプトが削除されています。

また、MSApp.execUnsafeLocalFunction() 内に .load() 呼び出しをラップしようとしましたが、ファイルからすべてのスクリプトが取り除かれます。何を与える?

4

3 に答える 3

7

エラーの原因となったjQueryの行を変更するだけで修正しました。

jQuery-1.8.0、5566 行目:

    append: function () {
        return this.domManip(arguments, true, function (elem) {
            if (this.nodeType === 1 || this.nodeType === 11) {
                self.appendChild(elem);  // problem line
            }
        });
    },

変更:

    append: function () {
        return this.domManip(arguments, true, function (elem) {
            if (this.nodeType === 1 || this.nodeType === 11) {
                var self = this;
                MSApp.execUnsafeLocalFunction(function () {
                    self.appendChild(elem);
                });
            }
        });
    },
于 2012-08-15T02:43:25.950 に答える
3

あなたが求めていることを行うための「正式な」方法があります。
WinJS.Navigation は、「シングル ページ アプリ」をサポートするために提供されています。たとえばdefault.html、動的にロードされたページ コンテンツが移動する場所を表すマークアップが含まれます。

<div id="contenthost" 
    data-win-control="Application.PageControlNavigator" 
    data-win-options="{home: '/pages/home/home.html'}">
</div>

上記の例では、読み込まれた実際のコンテンツ ページは/pages/home/home.html

イベント ハンドラーでは、次の操作を実行するloadか、別のページに移動するだけです。

WinJS.Navigation.nav("/pages/other/page.html");

確かに、それはjQueryではありませんが、うまく機能します:)

于 2012-08-28T04:35:08.420 に答える
1

アプリによっては、WinRT コンポーネントにアクセスする予定がない場合は、ページを ms-appx-web に移動してページのセキュリティ ポリシーを変更できますが、これを最初から指定することはできません。ナビゲートを行い、その新しいセキュリティ コンテキストを活用する必要があります。

msWWA.execUnsafeLocalFunction 関数を使用して JQuery への呼び出しをラップする他のオプションがあります。これにより、すべての安全でないコードを DOM にプッシュできます。

于 2012-08-14T18:35:22.393 に答える