類似的解釋一樣shaish但適合我自己的情況:
我的問題是,我隨時切換到另一個應用程序,來對Web應用程序時,web視圖保持重裝。我想這是因爲在我onCreate()
方法下面一行:myWebView.loadUrl(url);
我有想法的URL來傳遞這些狀態變量,但你知道這是不可能的呢。 我所做的就是使用onSaveInstanceState(Bundle outState) {...}
保存一些變量的狀態,並使用onRestoreInstanceState(Bundle savedInstanceState){...}
恢復它們。
在onCreate方法建立myWebView後,我做了以下內容:
myWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String urlString)
{
Log.i("onPageFinished", "loadVariables("+newURL+")");
if(newURL!="")
myWebView.loadUrl("javascript:loadVariables("+"\""+newURL+"\")");
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
jsInterface = new JSInterface(this,myWebView);
myWebView.addJavascriptInterface(jsInterface, "Android");
if (savedInstanceState != null)
{
// retrieve saved variables and build a new URL
newURL = "www.yoururl.com";
newURL +="?var1=" + savedInstanceState.getInt("key1");
newURL +="?var2=" + savedInstanceState.getInt("key2");
Log.i("myWebApp","NEW URL = " + newURL);
}
myWebView.loadUrl("www.yoururl.com");
那麼,什麼情況是,我第一次加載頁面,然後我通過變量時的頁面完成加載。 在javascript中loadVariables
功能如下:
function loadVariables(urlString){
// if it is not the default URL
if(urlString!="www.yoururl.com")
{
console.log("loadVariables: " + urlString);
// parse the URL using a javascript url parser (here I use purl.js)
var source = $.url(urlString).attr('source');
var query = $.url(urlString).attr('query');
console.log("URL SOURCE = "+source + " URL QUERY = "+query);
//do something with the variables
}
}
好吧,讓我來試試吧。我會讓你知道的。順便提一下,謝謝你的回答。 –
嘿,我確實嘗試過,但遇到了另一個問題。我的JavaScript頁面使用它來處理參數: 'var sURL = window.document.URL.toString();' 這不起作用。有沒有其他的方式來處理參數?我確切的需要是將一個字符串傳遞給javascript函數。 –
你不需要從url獲取參數,只需從函數中獲取它們即可。也可能(也許,還沒有測試過),你可以覆蓋windows.document.URL並把你自己的價值。 – shaish