簡體   English   中英

Android在Webview方向更改中保留JS變量

[英]Android Retain JS Variables in Webview Orientation Change

我有一個webview,並且將一些html5 + js加載到其中。 我的Web應用程序非常耗費數據。 使用狀態函數,我可以在方向更改后返回到原本應該位於的正確“頁面”,但是我的webapp處於危險之中,因為我的所有JavaScript變量也都已重置。

有沒有一種方法可以在更改Webview方向時保存和恢復我所有的JavaScript變量? 在表單文本框中輸入的值呢?

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

我在這方面取得了一些進展。 在我的JS中,我有一個稱為requestState();的鈎子requestState(); 調用此函數時,它將所有我的JS變量通過JS接口發送到android / java端。

在Java方面,我使用getLastNonConfigurationInstanceonRetainNonConfigurationInstance保留此信息。 我已經測試了輸出,並且確實在將方向更改為活動狀態之前,將所有JS變量確實保存到Java對象中。

問題正在回到我應該去的地方。 我的JS中有一個函數,其功能與requestState();相反requestState(); 稱為setState(input); 通過使用mywebview.loadUrl( "javascript:setState(" + jsonStr + ")" );從Android端調用此函數mywebview.loadUrl( "javascript:setState(" + jsonStr + ")" ); wv.restoreState(savedInstanceState); webview並調用wv.restoreState(savedInstanceState);之后,我在onCreate的結尾進行了此操作wv.restoreState(savedInstanceState);

但是我注意到的是,在我調用它setState未定義setState 實際上,在我的活動的onCreate函數結束時,沒有一個JS腳本可以被調用,甚至不存在。 為了測試我的理智,我嘗試了mywebview.loadUrl( "javascript:alert(" + jsonStr + ")" ); 我確實看到了我期望看到的-包含所有變量值的警報。 但是我注意到在警報出現之前頁面本身尚未呈現。 我應該如何解決此問題?

伙計們,不要浪費時間。 經過多次危險之后,我決定使用html5本地存儲,我想大多數人還是必須使用html5本地存儲,因為無法解決上述問題。

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

也就是說,一旦看到<BODY序列,請在<SCRIPT> ... </ SCRIPT>部分之前添加一個包含進行必要設置的函數的定義的部分,然后將ONLOAD屬性注入<BODY ...>標簽以調用此函數。

當然,如果已經有<BODY ONLOAD ...>,則情況會變得稍微復雜一些。 但是只有一點...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM