1

短いバージョン: Windows Phone 8 アプリでホストされている WebBrowser コントロールがあります。ユーザーがアプリを閉じて再度開いても保持されるように、javascript の値を保存するにはどうすればよいですか?

長いバージョン:

アプリの全期間にわたって存続する単一の MainPage.xaml ページでホストされる単一の WebBrowser コントロールを持つ Windows Phone 8 アプリケーションを開発しています。Visual Studio 2012 でプロジェクトを作成するときに、「Windows Phone HTML5 アプリ」プロジェクト タイプでアプリを作成しました。アプリケーションの 99% は、WebBrowser に送信する Web ページ (電話ではなく、インターネット上) でホストされています。アプリの起動時に移動します。アプリケーションの Web ページで、ページ間およびセッション間でデータを永続化しようとしています。たとえば、ユーザーが一度ログインしたら、それを電話に保存して、次回アプリを起動したときに再度ログインする必要がないようにします。

Cookie と HTML5 ローカル ストレージ (window.localStorage.setItem および getItem 経由) はどちらも、アプリの実行中にアプリ内のページ間でデータを共有するために正常に機能し、アプリから切り替えた場合でも (Windows phone の「ハード ボタン」経由)しかし、ユーザーがハード「戻る」ボタンを押してアプリを終了すると、次にアプリを起動したときに、すべての localStorage と Cookie がなくなったように見えます。

これは予想される動作ですか?WebBrowser がデータをどこに保存するかはわからないと思います (Isolated Storage? または、Internet Explorer で Web サイトにアクセスする場合、データが保存されているのと同じ場所に保存されるのでしょうか?)。いずれにせよ、これに対する「修正」がない場合、実行中のアプリのインスタンス間で JavaScript コードが値を保持できるように、独自のストレージメカニズムを提供する最善の方法はありますか? JavaScript を使用して値を取得および取得する方法を知っていれば、アプリの分離ストレージを喜んで使用します。ありがとうございました。

4

1 に答える 1

0

これが予想される動作であるかどうかはわかりません。

分離ストレージを取得するには、JS/.NET 相互運用を使用する必要があります。

JS から永続ストレージをトリガーする場合:

JS で使用window.external.notifyし、JSON 文字列 (たとえば) を生成して .NET 側に渡します。これは、.NET がデータを解析しなくても、IsolatedStorage に書き込むことができます。IsolatedStorage.AppSettingsデータのサイズに応じて、または完全なファイルを使用できます。

または、.NET からプロセスをトリガーすることもできます。

WebBrowser.InvokeScriptデータを表す同じ JSON 文字列を返す JS 関数を呼び出すための呼び出し。

.NET 側は、起動時にこのデータを検出して復元WebBrowser.InvokeScriptし、JS 関数を介して JSON 文字列を WebBrowser に戻すために使用できます。

もちろん、エラー ケース (不良/破損した JSON を復元しようとする) に対処する必要があります。

また、 App.Closingイベントに応答して .NET からこれをトリガーする場合は、データの書き込みに時間がかかりすぎないように注意する必要があります。実行速度が速ければ速いほどよいのですが、これは 10 秒以内に実行する必要があり、そうしないと OS がアプリを強制終了してしまいます。

WebBrowser.InvokeScript()およびScriptNotify の window.external.notify への登録については、MSDN のドキュメントを参照してください。

于 2013-06-26T21:06:55.813 に答える