2012-02-07 52 views
0

我有一個webview並加載了一些html5 + js。我的web應用程序非常密集。使用狀態函數,我可以找回正確的'頁面'我應該在方向更改後,但是我的web應用程序處於危險之中,因爲我所有的javascript變量也已被重置。Android在Webview方向中保留JS變量更改

是否有一種方法可以讓所有的javascript變量在webview方向更改上保存和恢復?什麼值輸入表單文本框?

==================

我在這方面取得了一些進展。在我的JS中,我有一個名爲requestState();的鉤子。當這個函數被調用時,它通過JS Interface將我所有的JS變量發送到android/java端。

在Java方面,我堅持使用getLastNonConfigurationInstanceonRetainNonConfigurationInstance這個信息。我測試了輸出,它確實將所有的JS變量保存到Java中的對象中,直到活動狀態在方向變更時發生變化。

問題是回到我應該在的地方。我在JS中有一個函數,其功能與requestState();相反,名爲setState(input);。該功能是通過使用mywebview.loadUrl("javascript:setState(" + jsonStr + ")");從Android端調用的。我在我的onCreate結束後做了這個,解壓後的webview並調用wv.restoreState(savedInstanceState);

雖然我注意到setState還沒有被定義在我叫它的時候!事實上,我的JS腳本沒有準備好被調用,甚至不存在/在我的活動的onCreate函數結束時被發現。爲了測試我的理智,我嘗試了mywebview.loadUrl("javascript:alert(" + jsonStr + ")");,我確實看到了我期望看到的內容 - 包含我所有變量值的警報。但是我注意到,在警報出現之前,頁面本身並未呈現。我應該如何解決這個問題?

回答

0

不要浪費你的時間人。在經歷了很多危險之後,我決定使用html5本地存儲,我想大多數人都必須使用它,因爲沒有解決上述問題的辦法。

0

我能想到的唯一答案是使用loadDataWithBaseURL重新加載WebView,並向頁面內容傳遞一個預處理版本,插入一個自定義body.onload處理程序,該程序會重新初始化所有必需的變量。

也就是說,一旦你看到的< BODY序列,在前面加上一個<SCRIPT> ... </SCRIPT >含有進行必要的設置函數的定義部分,然後注入一個onload屬性爲< BODY ... >標記調用此函數。

當然,如果已經有一個< BODY ONLOAD ... >,那麼情況會稍微複雜一些。但只有輕微...