我有Activity
个片段,其中一个片段在WebView
中显示我公司的网站。我一直在阅读有关如何保存/恢复WebView状态的信息,似乎WebView.saveStatus(Bundle)
和WebView.restoreStatus(Bundle)
方法不太可靠,而且它们不存储显示数据,所以我决定不要这样使用。
现在,我保存了onPause
中变量中访问过的最后一个网址,然后在onCreateView
中加载此网址。
private String lastUrl = "http://www.mycompany.com";
@Override
public void onPause() {
super.onPause();
lastUrl = webview.getUrl();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
contentView = super.onCreateView(inflater, container, savedInstanceState);
if (contentView == null) {
contentView = inflater.inflate(layout.extranet_fragment, container, false);
}
webview = (WebView) contentView.findViewById(R.id.extranet_webview);
webview.setWebViewClient(new WebViewClient());
webview.setWebChromeClient(new WebChromeClient());
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl(lastUrl);
return contentView;
}
它工作正常,但现在我需要保存单页Web应用程序的状态。然后,当我浏览网页时,网址始终为http://www.mycompany.com/#
。
如何保存/恢复此状态?
答案 0 :(得分:0)
您可以使用webClient并在WebView加载之前实现shouldOverrideUrlLoading来拦截所有网址。
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// ASSIGN THIS URL to your **lastUrl** variable
// Here put your code
Log.d("My Webview", url);
// return true; //Indicates WebView to NOT load the url;
return false; //Allow WebView to load url
}
});
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
System.out.println("your current url when webpage loading.." + url);
}
此外,你可以像在这里一样处理webview中的背压
if (mWebView.canGoBack()) {
mWebView.goBack();
}
在onBackPress活动或片段方法中使用上述代码。
答案 1 :(得分:0)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (mWebView.canGoBack()) {
mWebView.goBack();
} else {
finish();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}