Android 中,webview 绝对是使用最频繁的一个组件,涉及到很多的应用场景。如:新闻阅读、加载前端 H5 页面、与合作方的对接、加载本地静态资源等等。以下是我这几年在使用 webview 时的一些总结。
  • webView 的加载

webview 加载页面的方式主要有俩种,一种是加载HTTP || HTTPS 的H5 链接,一种是加载assets中大的本地HTML。

webView.loadUrl("https");//加载一个链接
webView.loadUrl("file:///android_asset/***.html");//加载静态文件
  • webView 设置 HEAD

有时候,为了一些安全考虑,会在加载 webview 时添加 head

Map<String, String> webViewHead = new HashMap<>();
webViewHead.put("Referer", HOST);
webView.loadUrl(url, webViewHead);
  • webView 设置 userAgent

同样,设置 userAgent 也是一种与外部 H5 交互时常用的一种安全方面的配置,一般我会先把想要设置的新 agent放在原来的基础上

String ua = webView.getSettings().getUserAgentString();
webView.getSettings().setUserAgentString(ua + webAgent);
  • webView 设置H5 调用原生时的标识

在与 H5 交互时,会涉及到 H5 与原生互相调用方法的情况,一般默认情况下,H5 会使用 android.去调用原生提供的方法,为了隐私和安全考虑,我们有时候会约定一个别的参数

webView.addJavascriptInterface(new WebAppInterface(),"约定好的标识");
  • webView 设置文件下载

如果H5 中有下载文件的一些操作,如果没有特别的要求,一般我们只需要简单配置就好

//webView 文件下载。直接跳转到外部浏览器进行下载
webView.setDownloadListener(new DownloadListener() {
   @Override
   public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
                downloadByBrowser(url);
   }
});

    private void downloadByBrowser(String url) {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.addCategory(Intent.CATEGORY_BROWSABLE);
        intent.setData(Uri.parse(url));
        startActivity(intent);
    }
  • 其他一些细节

  1. 涉及到拍照,录像可能会需要原生对WebChromeClient进行一些特殊的处理这些根据实际情况查找资料并完善,没有一个统一的配置。需要注意的存储的权限,位置,回调。
  2. 我们会在等待加载的过程中配置过渡动画,这些在 WebViewClient中进行配置,同时可以配置一下证书问题,防止某些网页无法正常访问。
  3. 特殊情况下,可能会要求手机端网页使用PC 版效果,这个可以通过设置setUserAgentString来实现。
  4. 加载缓慢,卡顿等可以通过开启硬件加速来避免。
  5. 腾讯封装的 webview有利有弊,你得能接受你的 App 增加几十 M 的缓存。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部