[英]Save webview content to android storage and load it
我想制作一个具有webview布局的android应用程序。 这是我的申请标准:
该应用程序第一次启动时,Webview会加载一个URL(也许是Facebook,Google等)。webview.loadUrl(“ http://www.google.com”);
加载网址后,应用程序会将加载的网址保存到android内部存储器中“特定位置”的HTML视图(file.htm)中。 因此,假设我打开“ google.com”,该应用程序将Google的网页保存为HTML文件(例如,文件名“ google.htm”),然后当我转到该“特定位置”并单击“ google .htm”文件,它将使用android的HTML查看器显示Google网页。
当应用程序再次启动时,或者只是说应用程序再次加载了url(在本例中为“ google.com”)时,它不会从“ google.com”页面中获取,但会从“ google.htm”中获取文件在内部存储的android上。 因此,从用户的角度来看,即使未连接到Internet,该应用程序仍可以加载网页。
简单起见
谁能帮我提供代码和解释? 我真的很感激。 谢谢大家:D
您可以在WebView使用Javascript接口,以在页面加载完成后返回HTML源代码的全部。 为此,您需要将自己的WebViewClient分配给WebView。
为此,请在Activity类中使用类似于以下内容的内容- 确保您的Activity实现了Observer :
public void onCreate(Bundle savedInstanceState) {
// ...
webView.setWebViewClient(new MyWebViewClient());
HtmlJSInterface htmlJSInterface = new HtmlJSInterface();
webView.addJavascriptInterface(htmlJSInterface, "HTMLOUT");
htmlJSInterface.addObserver(this);
// ...
}
// Called when our JavaScript Interface Observables are updated.
@Override
public void update(Observable observable, Object observation) {
// Got full page source.
if (observable instanceof HtmlJSInterface) {
html = (String) observation;
onHtmlChanged();
}
}
private void onHtmlChanged() {
// Do stuff here...
}
private class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
// When each page is finished we're going to inject our custom
// JavaScript which allows us to
// communicate to the JS Interfaces. Responsible for sending full
// HTML over to the
// HtmlJSInterface...
isStarted = false;
isLoaded = true;
timeoutTimer.cancel();
view.loadUrl("javascript:(function() { "
+ "window.HTMLOUT.setHtml('<html>'+"
+ "document.getElementsByTagName('html')[0].innerHTML+'</html>');})();");
}
}
}
然后,您将要创建HtmlJSInterface类,如下所示:
public class HtmlJSInterface extends Observable {
private String html;
/**
* @return The most recent HTML received by the interface
*/
public String getHtml() {
return this.html;
}
/**
* Sets most recent HTML and notifies observers.
*
* @param html
* The full HTML of a page
*/
public void setHtml(String html) {
this.html = html;
setChanged();
notifyObservers(html);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.