WebView

来源:互联网 发布:爱数数据备份 编辑:程序博客网 时间:2024/06/16 17:58

WebView:Android的app加载网页

访问互联网:注意添加网络权限    <uses-permission android:name="android.permission.INTERNET"/>

1.WebView的使用:(网上的博客总结网址 http://liangruijun.blog.51cto.com/3061169/647456)

方法一:    1.在布局文件XML中声明WebView    2.在Activity中实例化WebView    3.调用WebView的loadUrl( )方法,设置WebView要显示的网页        互联网用:webView.loadUrl("http://www.google.com");         本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets 文件中    4.为了让WebView能够响应超链接功能,调用setWebViewClient( )方法,设置  WebView视图    5.用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,        如果不做任何处理,点击系统回退键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面    6.需要在AndroidManifest.xml文件中添加权限,否则出现Web page not available错误。        <uses-permission android:name="android.permission.INTERNET"/>方法二:    1.在要Activity中实例化WebView组件:WebView webView = new WebView(this);    2.调用WebView的loadUrl()方法,设置WebView要显示的网页:        互联网用:webView.loadUrl("http://www.google.com");         本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets 文件中    3.调用Activity的setContentView( )方法来显示网页视图    4.用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖Activity类的onKeyDown()方法,        如果不做任何处理,点击系统回退键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面    5.需要在AndroidManifest.xml文件中添加权限,否则会出现Web page not available错误。        <uses-permission android:name="android.permission.INTERNET" />  

2.WebView的常用方法:

(1)webView通过loadData的方式加载html标签:    该方法只支持英文,不支持其他语言    /**     * data:字符串和标签("<form>密码<input type = 'text' name = ''></form>")     * mimeType:格式(数据文本类型 "text/html")     * encoding:编码格式(一般为"UTF-8")     */    webView.loadData(data, mimeType, encoding);(2)webView通过loadDataWithBaseURL的方式加载html标签:    该方法支持中文    /**     * baseUrl:设置为null     * data:字符串和标签("<form>密码<input type = 'text' name = ''></form>")     * mimeType:格式(数据文本类型 "text/html")     * encoding:编码格式(一般为"UTF-8")     * historyUrl:设置为null     */    webView.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl);(3)使用WebView.loadUrl的方式加载本地html的文件或者网址    加载本地的文件:(本地文件放在assets文件夹中)        webView.loadUrl("file:///android_asset/login.html");//注意是asset不是assets    加载网址:        webView.loadUrl("http://www.baidu.com");    加载JS(Java向js传值)        webView.loadUrl("javascript:funcInJs('这是从java传过来的值')");            funcInJs:js中的函数名(function 函数名)            funcInJs('这是从java传过来的值'):()中为java传给前端页面的值(3)设置webView支持js    webView.getSettings().setJavaScriptEnabled(true);(4)让我们自己的WebView充当打开新网页的客户端     webView.setWebViewClient(new WebViewClient());  (5)WebView设置支持Chrome浏览器    //避免网页的js代码没有加载完成,就调用了js方法,解决办法    webView.setWebChromeClient(new WebChromeClient(){        /**         * 对js中alert进行拦截         */        @Override        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {            result.confirm();//确认            Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();            //return true对弹出框完全拦截并且已经消费掉            //super.onJsAlert(view, url, message, result)            return true;        }    });(6)按返回键返回上一页,而不是返回第一页    重写onKeyDown()方法        @Override        public boolean onKeyDown(int keyCode, KeyEvent event) {            // 如果按下返回键,&& WebView.canGoBack            if(keyCode == event.KEYCODE_BACK && webView.canGoBack()){                webView.goBack();                return true;            }            return super.onKeyDown(keyCode, event);        }

3.WebView支持JS

(1)网页中JS调用java代码(在JS和Android代码间绑定一个新的接口)        //javaNativeInterface 与js代码一样        webView.addJavascriptInterface(this, "javaNativeInterface");        //@JavascriptInterface 注解API17后必须写,callbackInJava与js代码中一样        @JavascriptInterface        public void callbackInJava(final String stringFromJs ){            Toast.makeText(getApplicationContext(), stringFromJs, Toast.LENGTH_SHORT).show();        }        【js代码:                var oDiv = document.getElementById("oDiv");                oDiv.onclick = function(){                    //接口名.方法名                    javaNativeInterface.callbackInJava("我是从js来的");                }        】(2)java代码调用网页中JS代码(向JS传值)        webView.loadUrl("javascript:funcInJs('这是从java传过来的值')");            ()中为要传的参数,可为空            funcInJs  JS中的函数名        【            function funcInJs(str) {                var msg = document.getElementById("msg");                msg.innerHTML = str;            }                   】
0 0
原创粉丝点击