# ByWebView **Repository Path**: xuyfcodecloud/ByWebView ## Basic Information - **Project Name**: ByWebView - **Description**: 🌏 WebView 全方面使用,JS交互、进度条、上传图片、错误页面、视频全屏播放、唤起原生App、获取网页源代码、被作为第三方浏览器打开、DeepLink、[腾讯x5使用示例] - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2021-12-17 - **Last Updated**: 2023-07-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ByWebView [![JitPack][5]][6] [![API][7]][8] [![download][1]][2] ## Features - 基本配置使用(宽度自适应、返回网页上一层、显示网页标题等) - 唤起三方应用(拨打电话、发送短信、发送邮件等) - 上传图片(版本兼容) - 错误页面处理 - 全屏播放网络视频 - **与Js交互实例** - 优雅的进度条显示控件 **Demo示例:** - DeepLink的基本使用 - 被作为第三方浏览器打开 - **腾讯x5使用示例** ## 引用 1. Add the JitPack repository to your build file ```java allprojects { repositories { ... maven { url 'https://jitpack.io' } } } ``` 2. Add the dependency: ```java dependencies { implementation 'com.github.youlookwhat:ByWebView:1.1.6' } ``` ## Use ```java byWebView = ByWebView .with(this) .setWebParent(container, new LinearLayout.LayoutParams(-1, -1)) .useWebProgress(ContextCompat.getColor(this, R.color.coloRed)) .loadUrl(mUrl); ``` ### 与Js交互 - 调用Js方法: ```java // 无参数调用 byWebView.getLoadJsHolder().quickCallJs("javacalljs"); // 传递参数调用 byWebView.getLoadJsHolder().quickCallJs("javacalljswithargs", "android传入到网页里的数据,有参"); ``` - Js调用Java方法: ```java ByWebView.with(this) .addJavascriptInterface("injectedObject", new MyJavascriptInterface(this)) .loadUrl(mUrl); window.injectedObject.startFunction() ``` ### 生命周期处理 ```java @Override protected void onPause() { super.onPause(); byWebView.onPause(); } @Override protected void onResume() { super.onResume(); byWebView.onResume(); } @Override protected void onDestroy() { byWebView.onDestroy(); super.onDestroy(); } ``` ### 返回操作 ```java @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (byWebView.handleKeyEvent(keyCode, event)) { return true; } else { return super.onKeyDown(keyCode, event); } } ``` ### 上传图片之后的回调 ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { byWebView.handleFileChooser(requestCode, resultCode, intent); } ``` ### 监听 标题、进度条、WebViewClient ```java byWebView = ByWebView .with(this) .setWebParent(container, new LinearLayout.LayoutParams(-1, -1)) .useWebProgress(ContextCompat.getColor(this, R.color.coloRed)) .setOnTitleProgressCallback(onTitleProgressCallback) .setOnByWebClientCallback(onByWebClientCallback) .addJavascriptInterface("injectedObject", new MyJavascriptInterface(this)) .loadUrl(mUrl); ``` ```java private OnTitleProgressCallback onTitleProgressCallback = new OnTitleProgressCallback() { @Override public void onReceivedTitle(String title) { Log.e("---title", title); } @Override public void onProgressChanged(int newProgress) { } }; private OnByWebClientCallback onByWebClientCallback = new OnByWebClientCallback() { @Override public void onPageFinished(WebView view, String url) { // 网页加载完成后的回调 } @Override public boolean isOpenThirdApp(String url) { // 处理三方链接 Log.e("---url", url); return ByWebTools.handleThirdApp(ByWebViewActivity.this, url); } }; ``` ### 自定义错误页面 ```java ByWebView.with(this) .setErrorLayout(R.layout.by_load_url_error,"无法打开网页") .loadUrl(mUrl); ``` ### 完整设置 ```java byWebView = ByWebView .with(this) .useWebProgress(true) // 是否使用进度条,默认true,如使用可不用配置 .setWebParent(container, new LinearLayout.LayoutParams(-1, -1)) // 设置WebView父容器 .useWebProgress("#ffb6cf", "#ff0000", 3)// 进度条渐变色(开始颜色,结束颜色,高度) .setOnTitleProgressCallback(onTitleProgressCallback)// title 和 progress 监听 .setOnByWebClientCallback(onByWebClientCallback) // WebViewClient监听 .setErrorLayout(R.layout.by_load_url_error, "无法打开网页") // 设置错误页面及标题 .addJavascriptInterface("injectedObject", new MyJavascriptInterface(this)) // 设置Js监听 .loadUrl(mUrl); ``` ## Document - [Android 关于WebView全方面的使用(项目应用篇)](http://www.jianshu.com/p/163d39e562f0) - [Android DeepLink介绍与使用](https://juejin.cn/post/6844903954149539848) - [Android 应用被作为第三方浏览器打开](https://www.jianshu.com/p/272bfb6c0779) - [Android WebView与JS交互实例](https://www.jianshu.com/p/97f52819a19d) - [一款Android WebView进度条显示控件,使其加载进度平滑过渡](https://github.com/youlookwhat/WebProgress) ## Screenshots ## Download - [Demo示例下载][2] ## Tip - 混淆时应加上(通过JS向网页传值,如不加有时候会传值失败): ```java -keepattributes *Annotation* -keepattributes *JavascriptInterface* -keepclassmembers class * { @android.webkit.JavascriptInterface ; } ## Thanks - [AgentWeb](https://github.com/Justson/AgentWeb) ## Other - [WebView的使用及实战](http://www.jianshu.com/p/dbf9b7c04be5) - [WebView性能、体验分析与优化](https://tech.meituan.com/WebViewPerf.html) - [Android WebView开发问题及优化汇总](http://www.cnblogs.com/spring87/p/4532687.html) - [https://developer.android.com/reference/android/webkit/WebSettings.html](https://developer.android.com/reference/android/webkit/WebSettings.html) [1]:https://img.shields.io/badge/download-apk-blue.svg?style=flat [2]:https://github.com/youlookwhat/download/raw/main/ByWebView.apk [3]:https://img.shields.io/badge/version-2.7.2-brightgreen.svg?style=flat [4]:https://github.com/youlookwhat/download/raw/main/ByWebView.apk [5]:https://jitpack.io/v/youlookwhat/ByWebView.svg [6]:https://jitpack.io/#youlookwhat/ByWebView [7]:https://img.shields.io/badge/API-14%2B-red.svg?style=flat [8]:https://android-arsenal.com/api?level=14