类似 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
}
}