简单使用
在AndroidManifest.xml设置访问网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
private void init(){
webView = (WebView) findViewById(R.id.webView);
//WebView加载web资源
webView.loadUrl("http://baidu.com");
//加载asset中的html方便调试
//mWebView.loadUrl("file:///android_asset/demo.html");
//覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
//返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
view.loadUrl(url);
return true;
}
});
}
js和webview的交互
WebView 调用 JavaScript 方法
webView.loadUrl("javascript:METHOD")
JavaScript 调用 Java 方法
mWebView.addJavascriptInterface(new JsBridge(),"xksJsBridge");
final class JsBridge{
/**
* This is not called on the UI thread. Post a runnable to invoke
* loadUrl on the UI thread.
*/
@JavascriptInterface
public void customerService(){
runOnUiThread(new Runnable() {
@Override
public void run() {
startActivity(new Intent(WebViewActivity.this, ProfileCustomerActivity.class));
}
});
}
}
WebChromeClient方法
作用:android可以拦截一些js的方法例如log和alter等方便调试
/**
* Provides a hook for calling "alert" from javascript. Useful for
* debugging your javascript.
*/
final class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.d(LOG_TAG, message);
result.confirm();
return true;
}
@Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
Log.e("webview", consoleMessage.message());
return super.onConsoleMessage(consoleMessage);
}
}
WebViewClient方法
作用:覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
1,shouldOverrideUrlLoading
返回true表示你已经处理此次请求。
返回false表示有webview自行处理,一般都是把此url加载出来。
比如有一个下面的需求:有一个web页面上一个链接,点击后我们不希望webview直接转到链接的页面,而是起一个我们自己写的activity,此时就需要让shouldOverrideUrlLoading返回true,如下:
private WebViewClient webViewClient = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (match(url)) {
foo1();
return true;
}
return false;
}
};
另外post请求并不会回调这个函数,楼主可比较下shouldInterceptRequest
2,
webview缓存清理cookies
总结
1,只能加载带有http和https的url
2,注意添加网络请求的权限
3,js调用native方法接受的参数只能是String类型,而且方法内部最好写在runOnUIThread中
且,注册的类别名在js中不为null,
4,javascriptwebviewbride使用4.4版本以下的手机不能运行
5,在调试webview的时候最好先clear project一下,不然会出现webview加载的内容不变
6,只能获取webview中的title
网友评论