【Android-Activity】WebView控件的使用方式总结

本文详述了Android中WebView的使用,包括加载URL、HTML代码,以及Native与JavaScript的交互。在加载URL时,需开启JavaScript支持,并处理Android 27以上http协议的问题。此外,介绍了WebChromeClient和WebViewClient的作用,以及如何实现网页的前进后退和返回行为。最后,讲解了如何在WebView中执行JavaScript代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要总结归纳了WebView的使用方式:

  1. 加载URL:webview.loadURL("");

  2. 加载HTML代码webview.loadData();webview.loadDataWithBaseURL();

  3. Navie和javaScript间的相互调用

在使用WebView的时候最开始一定要记得在manifest中添加网络权限:

<uses-permission android:name="android.permission.INTERNET" />

在这里插入图片描述
写一个WebView控件用作演示:

<WebView
    android:id="@+id/web_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

——————————————————————————————————————————————————

1、加载URL

1.1 加载网络URL
mWvMain=findViewById(R.id.web_view);
mWvMain.loadUrl("http://baidu.com");

运行效果:
在这里插入图片描述
但是此处要特别注意,webview加载页面的话需要JS的支持,而webview不支持JS,所以我们要使用gettsettings().setJavaScriptEnable(true);的方法来保证能成功加载页面,上面的那种写法不一定可以成功加载!

mWvMain.getSettings().setJavaScriptEnabled(true);
mWvMain.loadUrl("http://m.baidu.com");

在安卓27以上是不能使用http://协议了,需要在在manifest中添加来支持http://协议

android:usesCleartextTraffic="true

实现点击“返回”返回到的界面时浏览器而非activity:

webviewclient: 主要用于帮助webview处理相关请求事件和通知
WebChromeClient: 主要用于处理与JavaScript相关的处理操作

法一:在webview中的跳转默认是用手机浏览器打开,可以去写一个类继承webviewclient

  class MyWebViewClient extends WebViewClient{
      @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
          view.loadUrl(request.getUrl().toString());
          return true;
      }

      @Override
      public void onPageStarted(WebView view, String url, Bitmap favicon) {
          super.onPageStarted(view, url, favicon);
          Log.d("WebView","OnPageStarted...");
      }

      @Override
      public void onPageFinished(WebView view, String url) {
          super.onPageFinished(view, url);
          Log.d("WebView","OnPageFinished...")}
  }

设置浏览器内部返回(依靠监听返回)

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

法二:继承 WebChromeClient,但是WebChromeClient和webviewClient不能同时使用,不然会报错

class MyWebChromeClinet extends 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);
        setTitle(title);
    }
}

加载网络URL

mWvMain=findViewById(R.id.web_view);
//加载网络URL
mWvMain.getSettings().setJavaScriptEnabled(true);
mWvMain.setWebChromeClient(new MyWebChromeClinet());
mWvMain.loadUrl("http://m.baidu.com");
1.2 加载本地assets下的HTML文件

在这里插入图片描述

<html>
hello world!
</html>
WvMain=findViewById(R.id.web_view);
WvMain.loadUrl("file:///android_asset/text.html");

运行效果:
在这里插入图片描述

2、加载HTML代码

webview.loadData();webview.loadDataWithBaseURL();使用方法同1中的内容

网页的前进后退:
能否返回/前进:webview.canGoBack() webview.canGoForward()
可以返回/前进:webview.goBack() webview.goForward()
前进及后退:webview.canGoBackOrForward(int step)
webview.goBackOrForward(int step)

3、Navie和javaScript间的相互调用

.evalateeJavaScript()或.loadURL("")中都可以写JavaScript代码,但是只有使用webchromeClient的时候JS才有效:

  class MyWebViewClient extends WebViewClient{
      @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
          view.loadUrl(request.getUrl().toString());
          return true;
      }

      @Override
      public void onPageStarted(WebView view, String url, Bitmap favicon) {
          super.onPageStarted(view, url, favicon);
          Log.d("WebView","OnPageStarted...");
      }

      @Override
      public void onPageFinished(WebView view, String url) {
          super.onPageFinished(view, url);
          Log.d("WebView","OnPageFinished...");
          mWvMain.loadUrl("javascript:alert('hello')");
      }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值