shaish のような同様の説明ですが、私自身のケースに適応しています:
私の問題は、別のアプリに切り替えるたびに、webapp にアクセスすると、webview がリロードし続けることでした。これは、私のonCreate()
メソッドの次の行が原因だと思います: myWebView.loadUrl(url);
URL でこれらの状態変数を渡すことを考えていましたが、ご存じのとおり、まだそれはできません。私がしたことは、を使用していくつかの変数の状態を保存し、onSaveInstanceState(Bundle outState) {...}
それらを復元することonRestoreInstanceState(Bundle savedInstanceState){...}
でした。
myWebView をセットアップした後の onCreate メソッドで、次のことを行いました。
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");
そのため、最初にページをロードし、ページのロードが完了したときに変数を渡します。JavaScriptloadVariables
関数では次のようになります。
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
}
}