Android webview

1.webview中显示网页使用mWebView.setWebViewClient(new WebViewClient(){…});
WebViewClient 的方法全解

doUpdateVisitedHistory(WebView view, String url, boolean isReload)  //(更新历史记录) 
onFormResubmission(WebView view, Message dontResend, Message resend) //(应用程序重新请求网页数据) 
onLoadResource(WebView view, String url) // 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。 
onPageStarted(WebView view, String url, Bitmap favicon) //这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。 
onPageFinished(WebView view, String url) //在页面加载结束时调用。同样道理,我们知道一个页面载入完成,于是我们可以关闭loading 条,切换程序动作。 
onReceivedError(WebView view, int errorCode, String description, String failingUrl)// (报告错误信息) 
onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host,String realm)//(获取返回信息授权请求) 
 onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) //重写此方法可以让webview处理https请求。
 onScaleChanged(WebView view, float oldScale, float newScale) // (WebView发生改变时调用) 
onUnhandledKeyEvent(WebView view, KeyEvent event) //(Key事件未被加载时调用) 
shouldOverrideKeyEvent(WebView view, KeyEvent event)//重写此方法才能够处理在浏览器中的按键事件。 
shouldOverrideUrlLoading(WebView view, String url) 
//在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。

2.web设置WebSettings webSettings = mWebView .getSettings();
常用设置

setJavaScriptEnabled(true);  //支持js
setPluginsEnabled(true);  //支持插件 
setUseWideViewPort(false);  //将图片调整到适合webview的大小 
setSupportZoom(true);  //支持缩放 
setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局  
supportMultipleWindows();  //多窗口 
setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);  //关闭webview中缓存 
setAllowFileAccess(true);  //设置可以访问文件 
setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点
webview webSettings.setBuiltInZoomControls(true); //设置支持缩放 
setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口 
setLoadWithOverviewMode(true); // 缩放至屏幕的大小
setLoadsImagesAutomatically(true);  //支持自动加载图片

3.加载界面3个方法

  LoadUrl            直接加载网页、图片并显示.(本地或是网络上的网页、图片、gif)  
  LoadData           显示文字与图片内容 (模拟器1.5、1.6)  
  LoadDataWithBase  显示文字与图片内容(支持多个模拟器版本) 

4.返回建

public boolean onKeyDown(int keyCode, KeyEvent event) {       
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {       
        mWebView.goBack();       
        return true;       
    }       
    return super.onKeyDown(keyCode, event);       
}

5.调用js

webView.addJavascriptInterface(new WebAppInterface(), "Android");
class WebAppInterface
{
   Context mContext;
   /** Instantiate the interface and set the context */
   WebAppInterface(Context c)
   {
       mContext = c;
   }
   /** Show a toast from the web page */
   // 如果target 大于等于API 17,则需要加上如下注解
   // @JavascriptInterface
   public void showToast(String toast)
   {
       Toast.makeText(mContext, toast, Toast.LENGTH_LONG).show();
   }
}
<script type="text/javascript">
    var appraction = this;
    function showAndroidToast(toast) 
    {
        if(appraction.Android) {
            appraction.Android.showToast(toast);
        }
    }
</script>

6.WebChromeClient

onProgressChanged(WebView view, int newProgress)  //通知应用程序当前网页加载的进度
onReceivedTitle(WebView view, String title)  //当document 的title变化时,会通知应用程序
onReceivedIcon(WebView view, Bitmap icon)  //当前页面有个新的favicon时候,会回调这个函数。
onReceivedTouchIconUrl(WebView view, String url//通知应用程序 apple-touch-icon的 url 
onShowCustomView(View view, CustomViewCallback callback)  //通知应用程序webview需要显示一个custom view,主要是用在视频全屏HTML5Video support。
onHideCustomView()  //退出视频通知
onCreateWindow(WebView view, boolean isDialog,  boolean isUserGesture, Message resultMsg)  //请求创建一个新的窗口,如果我们应用程序接管这个请求,必须返回true,并且创建一个新的webview来承载主窗口。如果应用程序不处理,则需要返回false,默认false。
onRequestFocus(WebView view)  //webview请求得到focus,发生这个主要是当前webview不是前台状态,是后台webview
onCloseWindow(WebView window)  //通知应用程序从关闭传递过来的webview并从view tree中remove。
onJsAlert(WebView view, String url, String message,  JsResult result)  //通知应用程序显示javascript alert对话框,如果应用程序返回true内核认为应用程序处理这个消息,返回false,内核自己处理。
onJsConfirm(WebView view, String url, String message,  JsResult result)  //通知应用程序提供confirm 对话框。
onJsPrompt(WebView view, String url, String message,  String defaultValue, JsPromptResult result)  //通知应用程序显示一个prompt对话框。 
onJsBeforeUnload(WebView view, String url, String message,  JsResult result)  //通知应用程序显示一个对话框,让用户选择是否离开当前页面,这个回调是javascript中的onbeforeunload事件,如果客户端返回true,内核会认为客户端提供对话框。默认行为是return false。
onExceededDatabaseQuota(String url, String databaseIdentifier,  long quota, long estimatedDatabaseSize, long totalQuota,            WebStorage.QuotaUpdater quotaUpdater)  //通知应用程序webview内核web sql 数据库超出配额,请求是否扩大数据库磁盘配额。默认行为是不会增加数据库配额。
onReachedMaxAppCacheSize(long requiredStorage, long quota,             WebStorage.QuotaUpdater quotaUpdater)  //通知应用程序内核已经到达最大的appcache。
onGeolocationPermissionsShowPrompt(String origin,              GeolocationPermissions.Callback callback) //当前页面请求是否允许进行定位。
onGeolocationPermissionsHidePrompt()  //通知宿主应用程序,对于地理位置的权限要求
openFileChooser(ValueCallback<Uri> uploadFile, String acceptType, String capture)  //这个回调是私有回调, 当页面需要请求打开系统的文件选择器,则会回调这个方法,比如我们需要上传图片,请求拍照,邮件的附件上传等等操作。(屏蔽input type="file")//4.1+
openFileChooser(ValueCallback<Uri> uploadFile)//3.0-
openFileChooser(ValueCallback<Uri> uploadFile, String acceptType)//3.0+
onShowFileChooser(WebView mWebView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams)//5.0+

接收上传的文件返回

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == FILECHOOSER_RESULTCODE) {
        if (null == mUploadMessage)
            return;
        Uri result = null;
        if (intent != null && resultCode == RESULT_OK){
            result = intent.getData();
        } else if (picFile != null) {
            result = Uri.fromFile(picFile);
        }
        mUploadMessage.onReceiveValue(result);
        mUploadMessage = null;
    } else if (requestCode == FILECHOOSER_RESULTCODE2) {
        if (null == mUploadMessage2)
            return;
        Uri result = null;
        if (intent != null && resultCode == RESULT_OK){
            result = intent.getData();
        } else if (picFile != null) {
            result = Uri.fromFile(picFile);
        }
        if (result != null) {
            mUploadMessage2.onReceiveValue(new Uri[]{result});
        } else {
            mUploadMessage2.onReceiveValue(new Uri[]{});
        }
        mUploadMessage = null;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>