首页 > 学院 > 开发设计 > 正文

WebView(原生)与Js 交互 基本与高级用法

2019-11-06 10:01:01
字体:
来源:转载
供稿:网友
1、WebView是什么? WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页。2、WebView怎么用?   @、加载网络地址(比如一个网址http://www.baidu.com)     1.Activity中实例化WebView:        WebView mWebView = new WebView(this);     2.调用WebView的loadUrl()方法,设置WevView要显示的网页地址        mWebView.loadUrl("http://www.baidu.com");   @、加载本地地址(比如一个网址file:///test/index.html)      1.mWebView.loadUrl("file:///test/index.html");      2.注意: 本地文件应该存放在assets 文件中      3、WebView的特殊处理。(与原生交互)   @、与原生交互的设置     mWebView.addjavascriptInterface(new WebAppInterface(this), "AndWindow");  public class WebAppInterface {     PRivate final IOnWebJavascriptListener listener;     //设置监听     public WebAppInterface(IOnWebJavascriptListener listener) {         this.listener = listener;     }     //添加与原生交互的注解JavascriptInterface 进行连接调用的方法     @JavascriptInterface     public String isLogin() {         return this.listener.isLogin();     } }   //接口 用来进行与html5进行交互   public interface IOnWebJavascriptListener {     public String isLogin();//是否登录   }  @、基本配置信息的处理        WebSettings mSettings = mWebView.getSettings();        mWebView.requestFocusFromTouch();//为需要键盘的的控件,提供获得焦点服务        mSettings.setLoadsImagesAutomatically(true);// 设置可以自动加载图片        mSettings.setAllowFileaccess(true);// 可以读取文件缓存(manifest生效)        mSettings.setJavaScriptCanOpenWindowsAutomatically(true);        //设置后代表支持Flash插件,适配4.2.2,4.3以后才主动支持,之前要加上        mSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);      //适配4.2.2 设置后才有视频图像展示  @、重要的配置信息(感觉比较重要的配置)        WebViewClient mClient = new MyWebViewClient();        mWebView.setWebViewClient(mClient);    private class MyWebViewClient extends WebViewClient {      //加载资源     @Override     public void onLoadResource(WebView view, String url) {         super.onLoadResource(view, url);     }     //加载网络或者本地网页之前做的事情     @Override     public void onPageStarted(WebView view, String url, Bitmap favicon) {        super.onPageStarted(view, url, favicon);     }    //允许重写事件的响应    @Override    public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {        return super.shouldOverrideKeyEvent(view, event);    }    @Override    public boolean shouldOverrideUrlLoading(WebView view, String url) {        String mUrl = url.replace("/", "");        String[] params = mUrl.split(":");        if (params[1].equals("login")) {            login();            //该方法是webActivity 实现 IOnWebJavascriptListener 的时候复写的        }        //hitTestResult==null解决重定向问题        WebView.HitTestResult hitTestResult = view.getHitTestResult();        if (!TextUtils.isEmpty(url) && hitTestResult == null) {            view.loadUrl(url);            return true;        }        return super.shouldOverrideUrlLoading(view, url);    }    @Override    public void onPageFinished(WebView view, String url) {        super.onPageFinished(view, url);//网页加载完毕时调用的方法    }    class myWebChromeCilent extends WebChromeClient {        @Override        public void onReceivedTitle(WebView view, String title) {            super.onReceivedTitle(view, title);            //该方法用来获取html5网页的标题        }    }    long firstTime = 0;//进来时间为0    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {    //处理返回键的操作        if (keyCode == KeyEvent.KEYCODE_BACK) {            long secondTime = System.currentTimeMillis();            if (secondTime - firstTime > 2000) { //如果两次按键时间间隔大于2秒                firstTime = secondTime;//更新firstTime                return true;            } else { //两次按键小于2秒时,退出Activity                setResult(RESULT_OK);                finish();            }            // 执行速度过快,要判断时候为空            if (mWebView != null && mWebView.canGoBack()) {                isGoBack = true;                mWebView.goBack();            } else {                finsh();//销毁自身            }            return true;        }    }
下载地址:http://download.csdn.net/detail/gl_mine_csdn/9765397 点击打开链接
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表