专栏名称: _hero
目录
相关文章推荐
秋叶PPT  ·  PPT文字巨多!领导还不让删!咋办? ·  3 天前  
Python爱好者社区  ·  “洪荒之力”傅园慧,任职C9! ·  6 天前  
51好读  ›  专栏  ›  _hero

WebView的基本使用

_hero  · 掘金  ·  · 2019-08-19 05:19

正文

阅读 40

WebView的基本使用

一、一些常用的方法

1.WebChromeClient

WebChromeClient来处理js交互与互联网业内容,常用到的方法有

  1. onJsAlert() 接收网页的alert事件

  2. onJsPrompt() 接收网页的Prompt输入框事件

  3. onJsConfirm() 接收网页的confirm确认事件

  4. onProgressChanged() 页面加载百分比

  5. onReceivedIcon() 接收网页的图标

  6. onReceivedTitle() 接收网页的标题

2.WebSettings

webview的设置类,能够设置webview的各种详细参数

  1. 设置是否使用file协议访问网页,常用于访问assets与raw文件夹下面的网页 setAllowFileAccess(boolean allow)

  2. 设置是否使用webview自带的缩放功能
    setBuiltInZoomControls(boolean enabled)

  3. 设置是够支持html5的数据库功能
    setDatabaseEnabled(boolean flag)
    setDomStorageEnabled(boolean flag);

  4. 设置页面的文字大小
    setDefaultFontSize(int size)

  5. 设置是否执行页面的js方法
    setJavaScriptEnabled(boolean flag)

  6. 设置返回键的处理,是否使用缓存加载页面
    LOAD_DEFAULT(先从cache加载,没有再去网络加载), LOAD_CACHE_ELSE_NETWORK(先从cache加载,没有再去网络加载) LOAD_NO_CACHE(不使用cache) LOAD_CACHE_ONLY(只使用cache)
    setCacheMode()

3.WebView

android提供的控件,能够加载网页和html数据。

  1. 增加一个对象使webview能够让java代码与js交互 addJavascriptInterface(Object object, String name)

  2. 加载一个网页,能够是网络的网页,也能加载本地的网页,本地的网页使用(file:///assets/)来 加载。也可以调用一个javaScrpit方法
    loadUrl(String url)

  3. 加载一段html代码
    loadData(String data, String mimeType, String encoding)
    loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)

  4. 刷新当前页面
    reload()

  5. 获取当前页面的标题
    getTitle()

  6. 判断webview是否能够回到上一步
    canGoBack()
    goBack()

    二、Webview的基本使用

由于布局比较简单,这里就不在给出,布局中只有一个VebView控件

public class WebViewActivity extends Activity {


    WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);

        webView = (WebView)findViewById(R.id.webwiew);

        //启用javaScript
        webView.getSettings().setJavaScriptEnabled(true);

        //全屏显示
        webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
        webView.getSettings().setUseWideViewPort(true);
        webView.getSettings().setLoadWithOverviewMode(true);


        webView.loadUrl("这里是所要加载的网页的url");

        //处理url重定向不要抛到系统浏览器
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view,String url){
                view.loadUrl(url);
                return true;
            }
        });
    }

    @Override
    public void onBackPressed(){
        //如果webwiew能够回退到上一个页面
        if (webView.canGoBack()){
            webView.goBack();
        }
        super.onBackPressed();
    }
}

复制代码

三、Android中Java与js之间的交互

  1. 首先在Activity中写一个方法(我这里是javaShow()方法)。方法体上面必须帖@JavascriptInterface标签
  2. 通过调用addJavascriptInterface(Object object, String name)增加一个Java对象使webview能够让java代码与js交互,object是传给js的Java对象,name是给该对象起的名字。
  3. js通过window.对象名.方法名()(我这里对象名为demo,java的方法名为javaShow,所以就可通过window.demo调用到javaShow()方法)就可以调用到java中的方法
public class WebViewActivity extends Activity { 

 WebView mWebView;
 //html的内容
 String body;
 
 @Override
 @JavascriptInterface
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_web_view);

     mWebView = (WebView) findViewById(R.id.webview);
     mWebView.getSettings().setJavaScriptEnabled(true);
 
 //这里js通过window.demo.javaShow()就可以调用到java中的javaShow()方法
     body = "<html><head><style>img{width:100%}</style><script type='text/javascript'>function show(){window.demo.javaShow()} </script></head><body>" + html代码(由于篇幅问题这里用html代码几个文字来代替一些html内容) + "</body></html>";
     mWebView.addJavascriptInterface(this,"demo");
     mWebView.loadDataWithBaseURL(null, body, "text/html", "utf-8", null);
 }
 
 @JavascriptInterface
 public void javaShow(){
     Intent intent = new Intent();
     intent.setClass(this,DetailImageActivity.class);
     intent.putExtra("image",images);
     startActivity(intent);

 }
}
复制代码

四、使用WebView需要注意的问题

在android 4.2版本以下的手机有一个问题就是,webview会被JavaScript注入,造成手机出现信息安全的问题,比如下载病毒,发送短信等等。问题就出在addJavascriptInterface方法。JavaScript通过调用这个接口可以直接操作本地的JAVA接口。
google在4.2的版本上面解决了这个问题,解决的方法是在被js调用的方法上面加上一个声明, @JavascriptInterface ,但是4.2版本以下的手机就没有提出官方的解决方法。