2013-02-27 17 views
6

私は多くのスレッドを検索しましたが、私の質問に対する答えはまだ見つかりません。私はWebViewを使用してAndroidアプリで取り組んでいます。私onCreate()WebView saveState()はJavascriptの変数/環境を保持しますか?

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    webView.saveState(savedInstanceState); 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    webView.restoreState(savedInstanceState); 
} 

私もこれを持っている:

は、私はこのようなWebView状態を保存するためにonSaveInstanceState()onRestoreInstanceState()を使用

public void onCreate(Bundle savedInstanceState) { 
    ... other code ... 
    if(savedInstanceState != null){ 
     webView.saveState(savedInstanceState); 
    }else{ 
     webView.loadUrl("http://mypage"); 
    } 
} 

問題:WebViewを復元しても、Javascriptの変数/環境/作業領域がまったく復元されないようです。アプリがバックグラウンドで強制終了され、復元されると、Javascript全体がすべてのオブジェクト/変数とともに削除されます。 JavaScriptコードは、名前に離間、即ちwindow.utilitiesPackwindow.eventHandlerswindow.automationなどであり、それらは未定義です。また、JQueryなどのjavascriptプラグインが使用されています。復元状態の後は、すべてが未定義のようです。基本的にJavascript全体は復元されません。

は、誰かが確認するか、これはそれが本当に(Javascriptが保存されない)であるかであることを反証することはできますか? Javascriptワークスペース全体が保存されない場合、正確にWebView.saveState()は保存されますか?既存のAPIを使用してJavascriptオブジェクトを保持する簡単でエレガントな方法はありますか?

// ============================================ ==========

更新1:したがって、問題は残ります。最も重要な難しさはこれです:

私は結果のためにカメラIntentを立ち上げています。写真を撮影した場合、アプリがWebView活動に戻って取得し、いくつかのデータ変数とHTML5 LocalStorageを更新するためにJavascriptを使用することになっています。

カメラアクティビティが表示されている間にメインアクティビティが終了するので、WebViewに戻ったときにはJavascriptがなくなり、Androidコードから呼び出せる機能はありません。これは、毎回Galaxy S3で発生します。それはまだ他の携帯電話では起こりますが、写真を撮るたびにではありません。

はここで何をするか分かりません。 Camera Intentで写真を撮影している間、何らかの形でWebViewでメインのアクティビティを作成して状態を保持する必要があります。どのようにこれを達成することができるか考えている人はいますか?

+1

「誰かがこれが本当にどのようになっているかを確認することができますか?それを証明することはできますか? – millimoose

+0

(ドキュメントには、保存されているものが 'WebBackForwardList'であることを暗示しているようです。) – millimoose

+1

"試してみて、実際に何が起こったのかを確認していませんか? "私はJavascript全体が保存されていないとは信じられません。私は何かを理解していないことを望んでいる、それはその場合、これは複雑なjavascript機能を持つWebページを使用するアプリケーションのためのそのような制限です。 – user2113581

答えて

3

非常に少数の情報見つけ、これだけの行は:

このメソッドは、もはやこのWebViewのための表示データを格納しないことに注意してください。以前の動作では、restoreState(Bundle)が呼び出されなかった場合にファイルがリークする可能性がありました。

と、この行:

状態を保存するために使用戻る/進むリストの同じコピーを返します。

WebView.saveState(Bundle)のjavadocにあります。

+1

あなたの返信ありがとうございます。この問題に遭遇してからしばらくしていたので、ここで私の質問を忘れてしまった。私はそれが正しいのであなたの答えをマークしています。同じ問題を抱えている人にとって:私がそれを解決する方法は、ActivityのコンテキストではなくAppのコンテキストでwebViewを定義することです。今はすべてが期待通りに機能します。このアプローチの唯一の問題は、alert()/ confirm()を働かせるためにonJsAlert()とonJsConfirm()をオーバーライドする必要があることです。また