博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android-强大的WebView
阅读量:3943 次
发布时间:2019-05-24

本文共 4804 字,大约阅读时间需要 16 分钟。

可以做哪些事情?

  • 加载线上 url

    mWebView.loadUrl("https://www.baidu.com");
  • 加载本地 html

  • 和 js 进行交互

    • js调用原生 App

      public class TestJSEvent {
      @JavascriptInterface // 4.2以上必须加此注解,否则不生效 public void showToast(String toast) {
      Toast.makeText(WebViewActivity.this, toast, Toast.LENGTH_SHORT).show(); } }// js调用原生 AppmWebView.addJavascriptInterface(new TestJSEvent(), "TestApp");
    • 原生 App调用 js

      mWebView.loadUrl("javascript:javaCallJS('可以传参数')");
  • 历史记录

    WebBackForwardList webBackForwardList = mWebView.copyBackForwardList();  WebHistoryItem historyItem = webBackForwardList.getItemAtIndex(0);	String historyUrl = historyItem.getUrl();
  • 导航

    @Overridepublic void onBackPressed() {
    // 页面回退,而不直接关闭 Activity if (mWebView != null && mWebView.canGoBack()) {
    mWebView.goBack(); // 回退 // mWebView.goForward(); // 前进 // mWebView.goBackOrForward(+1); // 回退或前进。steps: 负为回退,正为前进 // mWebView.reload(); // 刷新 } else {
    super.onBackPressed(); }}

如何使用?

  • 申请网络权限

  • 类结构

  • 常用设置

    • WebSettings

      // 打开 JavaScript mWebView.getSettings().setJavaScriptEnabled(true);
    • WebViewClient

      mWebView.setWebViewClient(new WebViewClient() {
      @Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
      // 是否重新加载(拦截页面) return super.shouldOverrideUrlLoading(view, url); } @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
      return super.shouldOverrideUrlLoading(view, request); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) {
      // 页面开始加载 super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) {
      // 页面结束 super.onPageFinished(view, url); } @Override public void onLoadResource(WebView view, String url) {
      // 加载资源 super.onLoadResource(view, url); } @Override public void onPageCommitVisible(WebView view, String url) {
      super.onPageCommitVisible(view, url); } @Nullable @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
      // 拦截请求 return super.shouldInterceptRequest(view, request); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
      // 加载失败时 super.onReceivedError(view, errorCode, description, failingUrl); }});

      方法太多了,这里看几个比较常用的

    • WebChromeClient

      mWebView.setWebChromeClient(new WebChromeClient() {
      @Override public void onProgressChanged(WebView view, int newProgress) {
      // 获取网页加载的进度 super.onProgressChanged(view, newProgress); } @Override public void onReceivedTitle(WebView view, String title) {
      // 获取网页的标题 super.onReceivedTitle(view, title); } @Override public void onCloseWindow(WebView window) {
      // 关闭窗口 super.onCloseWindow(window); } @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
      // js加载的时候 return super.onJsPrompt(view, url, message, defaultValue, result); } @Override public boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result) {
      // js导入的时候 return super.onJsBeforeUnload(view, url, message, result); } @Override public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
      // 位置权限 super.onGeolocationPermissionsShowPrompt(origin, callback); }});

      方法太多了,这里看几个比较常用的

更深入的使用

  • Cookie

    CookieManager cookieManager = CookieManager.getInstance();cookieManager.setAcceptCookie(true);cookieManager.setCookie("domain", "cookie");cookieManager.removeAllCookies();
  • History

    WebBackForwardList webBackForwardList = mWebView.copyBackForwardList();WebHistoryItem historyItem = webBackForwardList.getItemAtIndex(0);String historyUrl = historyItem.getUrl();
  • 页面导航

  • Hybird

    Hybrid App(混合模式移动应用)是指介于 Web App(套壳)、Native App(原生)这两者之间的 App ,兼具“ Native App 良好用户交互体验的优势 ”和“ Web App 跨平台开发的优势 ”。

  • 如何拦截网络请求

    @Nullable@Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
    // 拦截请求 return super.shouldInterceptRequest(view, request);}
  • 如何显示进度

    @Overridepublic void onProgressChanged(WebView view, int newProgress) {
    // 获取网页加载的进度 super.onProgressChanged(view, newProgress);}
  • 调试

    WebView.setWebContentsDebuggingEnabled(true);

转载地址:http://ykiwi.baihongyu.com/

你可能感兴趣的文章
Git的使用
查看>>
Linux域名IP映射
查看>>
Java的反射机制
查看>>
SpringCloud微服务应用入门
查看>>
SpringCloud之session共享
查看>>
Springboot集成Shiro实现认证
查看>>
Spring、Spring MVC和MyBatis编程式集成示例
查看>>
在Springboot应用使用redis缓存
查看>>
Spring入门
查看>>
Idea提示键和热部署配置以及git使用
查看>>
Deepin+Vscode搭建vue.js项目及Git操作
查看>>
基于Spring Security前后端分离式项目解决方案
查看>>
Vue3.0+Vite2.0项目框架搭建(一)
查看>>
Vue3.0+Vite2.0项目框架搭建(二)- 引入axios
查看>>
Vue3.0+Vite2.0项目框架搭建(三)- 引入Element3
查看>>
使用Vue CLI v4.5(+)搭建Vue3.0项目框架搭建
查看>>
Java集合框架
查看>>
线程协作与生产者消费者问题
查看>>
Vue入门
查看>>
非starter方式实现springboot与shiro集成
查看>>