1

Windows ランタイム コンポーネントを作成し、それをアプリへの参照として追加することでネイティブを呼び出すことができることはわかっていC#ますが、アプリが.xml 内に読み込まれているときにアプリから同じことを行うことは可能ですか?WinJSWinJSWinJSWebView

試してみましたが、WinJS内のアプリがWebViewまったく別のコンテキストまたは何かで動作しているようで、シンボルが見つからないため、クラッシュし、 の新しいインスタンスを起動しVS2013て試してデバッグするよう提案されます。

4

1 に答える 1

4

ネイティブ JavaScript アプリのアプリ ホスト コンテキストと Web ビューのコンテキストは 2 つの異なるものであるという点で、あなたは正しいです。コンポーネントは WinRT API 自体と同じように構造化されているため、アプリ ホストのみが JavaScript が WinRT コンポーネントに適用される WinRT と通信できるようにします。実際、あなたの質問は、WinRT コンポーネントを Web ブラウザーにロードできるかどうかを尋ねるのと同じです (Web ビューは本質的に Web ブラウザー コントロールであるため)。答えはノーです。

Web ビュー内のコードがそのコンテキストから抜け出し、WinRT API にアクセスできる任意のコード (JS、C# など) と対話する唯一の方法は、Web ビュー内から window.external.notify を使用することです。アプリは、そのメッセージを webview からのイベントとして受け取ります (x-ms-webview を使用する JS では MSWebViewScriptNotifyあり、XAML WebView を使用する C#/VB ではScriptNotify です)。その後、アプリは、応答として引数呼び出し API を処理できます。

もちろん、window.external.notify は値を返すことができるという点で関数呼び出しのようには機能しないため、アプリは InvokeScriptAsync メソッドを介して結果を webview に送信し、非同期関係にする必要があります。

詳細については、私の無料の電子ブック、Programing Windows Store Apps with HTML, CSS, and JavaScript, 2nd Edition ( http://aka.ms/BrockschmidtBook2 ) の第 4 章 (204 ページから) で詳しく説明しています。

于 2015-03-03T22:31:32.117 に答える