记自己遇到的一些WebView坑

2024-08-25 02:18
文章标签 遇到 webview

本文主要是介绍记自己遇到的一些WebView坑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

记自己遇到的一些WebView坑

1. 坑1

这个bug遇到的时候不是必现。
WebView加载时设置了这样的语句会加载白页:

webView.loadData("", "text/html", "uft-8");

例如:

webView.loadData("", "text/html", "uft-8");
//...<other code>...webView1.loadUrl(url);
//...<other code>...@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.iv_goback:if (webView.canGoBack()) {//此时此处canGoBack()有一定几率为true 导致返回为白页webView.goBack();//返回上一浏览页面} else {finish();//关闭Activity}}}

我的配置代码

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_html5_bottom_bar);mProgressBar = (ProgressBar) findViewById(R.id.progressBar);mProgressBar.setMax(100);
}
private void requestData(String url) {WebSettings webSettings = webView.getSettings();webSettings.setDefaultTextEncodingName("utf-8");webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);//不使用缓存webView.setWebChromeClient(new MyChromeClient());webSettings.setBuiltInZoomControls(false); // 放大缩放按钮// 如果访问的页面中有JavaScript,则WebView必须设置支持JavaScriptwebSettings.setJavaScriptEnabled(true);//JS交互webView.addJavascriptInterface(new JsInteration(), "control");// 设置可以支持缩放webSettings.setSupportZoom(true);// 扩大比例的缩放webSettings.setUseWideViewPort(true);webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);webSettings.setLoadWithOverviewMode(true);webView.setWebViewClient(new WebViewClient() {public boolean shouldOverrideUrlLoading(WebView view, String url) { // 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边view.loadUrl(url);return true;}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);isShowFail = false;}@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);if (!isShowFail) { customview.showLoadStateView(CustomView.STATE_NONE);}}@Overridepublic void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {super.onReceivedError(view, errorCode, description, failingUrl);isShowFail = true;customview.showLoadStateView(CustomView.STATE_ERROR);// 加载失败时显示的失败界面}});webView.loadUrl(url);
}
//与JS交互的对象
public class JsInteration {@JavascriptInterfacepublic void gotoGoodInfo(String id){//doSomething}
}
// 设置加载进度
public class MyChromeClient extends android.webkit.WebChromeClient {@Overridepublic void onProgressChanged(WebView view, int newProgress) {mProgressBar.setProgress(newProgress);if (newProgress == 100) {mProgressBar.setVisibility(View.GONE);} else {mProgressBar.setVisibility(View.VISIBLE);}super.onProgressChanged(view, newProgress);}@Overridepublic void onReceivedTitle(WebView view, String title) {//获取加载的url的标题super.onReceivedTitle(view, title);}
}

陆续更新,博客新人欢迎评论╮( ̄▽ ̄”)╭

这篇关于记自己遇到的一些WebView坑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104265

相关文章

Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法

最近在跑一个开源项目遇到了以下问题,查了很多资料都大(抄)同(来)小(抄)异(去)的,解决不了根本问题,费了很大的劲终于得以解决,记录如下: 1、问题及过程: (myenv) D:\Workspace\python\XXXXX>conda install python=3.6.13 Solving environment: done.....Proceed ([y]/n)? yDownloa

Android 友盟消息推送集成遇到的问题

友盟消息推送遇到的问题 集成友盟消息推送,步骤根据提供的技术文档接入便可。可是当你集成到项目中去的时候,可能并不是一帆风顺就搞定,因为你项目里面是可能集成了其他的sdk(比如支付宝,微信,七鱼等等三方的sdk)。那么这个时候,再加上友盟的消息推送sdk集成可能就会出现问题。 问题清单 友盟消息推送sdk和支付宝sdk冲突问题 后台配置了消息推送,也显示发送成功,但是手机没有收到消息通知

前端开发中遇到的小问题以及解决方案记录2

1、H5中适配屏幕的工具-postcss-px-to-viewport postcss-px-to-viewport。因为设计稿一般给的都是375px宽度的,所以假如一个字体是16px,那么在开发中不能直接写死为16px,因为各个厂商的手机屏幕大小是不同的,所以要根据屏幕大小去自适应修改px的大小,postcss-px-to-viewport这个工具就能很好地把项目中的px单位自动改为计算后的v

Android studio 遇到的问题总结

1、Error:Error: The WIFI_SERVICE must be looked up on the Application context or memory will leak on devices < Android N. Try changing getSystemService to getApplicationContext().getSystemService [Wifi

eclipse项目导入AS中遇到的问题

将eclipse的项目通过AS的启动中的导入(如果你的AS不是在这个界面,那么通过File->close project就可以进入这个界面了) 下面呢是导入后的一些问题 1、Android之Error: 'L' is not a valid file-based resource name character解决办法 参考:https://blog.csdn.net/u011068702

Android开发中遇到的各类问题汇总

Q1: Error:The number of method references in a .dex file cannot exceed 64K.Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html 应用中的Dex 文件方法数超过了最大值65536的上限

❤《实战纪录片 1 》原生开发小程序中遇到的问题和解决方案

《实战纪录片 1 》原生开发小程序中遇到的问题和解决方案 文章目录 《实战纪录片 1 》原生开发小程序中遇到的问题和解决方案1、问题一:原生开发中 request请求中返回 的数据无法 使用this传递给 data{}中怎么办?2、刚登录后如何将token信息保存,然后在后边的信息中使用。3、小程序下边的导航栏如何设置 1、问题一:原生开发中 request请求中返回 的数据无法

android 的webView加载h5,和h5的交互(java和JavaScript的交互)

Android提供了一个很强大的WebView控件用来处理Web网页,而在网页中,JavaScript又是一个很举足轻重的脚本。本文将介绍如何实现Java代码和Javascript代码的相互调用。(通俗点说就是,点击那个Web页面的按钮啥的,可以传到原生app;或者原生app调用Web页面的js方法) 如何实现 实现Java和js交互十分便捷。通常只需要以下几步。 WebView

影响画布微信小程序canvas及skyline和webview用户界面布局的关键流程

影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 目录 影响微信小程序画布canvas及skyline和webview用户界面布局的关键流程 一、微信小程序canvas开发流程 1.1、官方指南 1.2、客制化开发 第一步:在 WXML 中添加 canvas 组件 第二步:获取 Canvas 对象和渲染上下文 第三步 画布#ID选择器执行回调——