整理一些关于 WebView 常用的知识点。
常用方式:
mWebView= (WebView)findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl(mWebUrl);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);// 在当前的webview中跳转到新的url
return true;
}
});
WebView 打开本地缓存 , 使用 localStorage 功能
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
// Set cache size to 8 mb by default. should be more than enough
mWebView.getSettings().setAppCacheMaxSize(1024*1024*8);
// This next one is crazy. It's the DEFAULT location for your app's cache
// But it didn't work for me without this line.
// UPDATE: no hardcoded path. Thanks to Kevin Hawkins
String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
mWebView.getSettings().setAppCachePath(appCachePath);
mWebView.getSettings().setAllowFileAccess(true);
mWebView.getSettings().setAppCacheEnabled(true);
mWebView.loadUrl(url);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
view.loadUrl(url);// 在当前的webview中跳转到新的url
return true;
}
});
webView 与本地交互
在 webView 的基本配置下,通过 js 调用本地方法。
- 本地代码配置如下:
// 第一个参数是本地定义的提供给 js 调用的类,第二个参数为 js 端调用的对象引用。
mWebView.addJavascriptInterface(new TestObject(), "demo");
// 内部类
private final class TestObject{
// 4.x 版本以后需要在方法上面添加该注解
@JavascriptInterface
public void clickOnAndroid() {
Log.i("","click on Android ");
}
}
- h5 调用配置:
<a onClick="window.demo.clickOnAndroid()">test</a>
本地调用 h5 的 js 方法:
// javascript: 后面跟 js 的方法名。
mWebView.loadUrl("javascript:alertJsTest()");
注意一点,在本地和 js 交互时要注意 方法名,参数,以及参数类型都要保持一致。