1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Android WebView白屏解决方案

Android WebView白屏解决方案

时间:2020-01-14 07:54:27

相关推荐

Android WebView白屏解决方案

项目中 加载webview网页 偶尔链接会白屏 先说一下解决方案

解决方案三种:

1、mWebView.getSettings().setDomStorageEnabled(true);

2、mWebView.getSettings().setPluginState(WebSettings.PluginState.ON);//设置是否支持插件

3、还有可能和缓存有关系 可以设置清理一下缓存

webView默认是不开启DOM Storage的,需要手动调用setDomStorageEnabled(true)来开启,只有开启了DOM Storage api后页面才能正常缓存一些数据

有可能是h5用了插件 要设置一下

什么是DOM Storage

HTML5 是下一代 HTML 标准,开始吸引越来越多人的目光。HTML5 的 DOM Storage 机制提供了一种方式让程序员能够把信息存储到本地的计算机上,在需要时获取。这点和 cookie 相似,区别是 DOM Storage 提供了更大容量的存储空间。

DOM Storage 分为 sessionStorage 和 localStorage。

localStorage 对象和 sessionStorage 对象使用方法基本相同,它们的区别在于作用的范围不同。sessionStorage 用来存储与页面相关的数据,它在页面关闭后无法使用。而 localStorage 则持久存在,在页面关闭后也可以使用。

webview一些必要设置的属性

//设置支持jswebSettings.setJavaScriptEnabled(true);//设置适应屏幕webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小webSettings.setPluginState(WebSettings.PluginState.ON);//设置是否支持插件webSettings.setSupportZoom(true); //支持缩放webSettings.setBuiltInZoomControls(true);webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件//设置存储模式webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);webSettings.setAllowFileAccess(true);//setDomStorageEnabled解决了webview白屏问题 设置支持DomStoragewebSettings.setDomStorageEnabled(true);//设置支持本地存储webSettings.setDatabaseEnabled(true);//设置缓存webSettings.setAppCacheEnabled(true);webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);webSettings.setJavaScriptCanOpenWindowsAutomatically(true);//支持通过JS打开新窗口webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片webSettings.setDefaultTextEncodingName("utf-8");//下面三个各种监听mWebView.setWebChromeClient(wcc);mWebView.setDownloadListener(dl);mWebView.setWebViewClient(wvc);//加载连接mWebView.loadUrl(XXXXXXXX);

Android WebView与h5的js方法交互:

1、设置支持js

webSettings.setJavaScriptEnabled(true);

2、注入 Java 对象到 WebView 中

binding.webView.addJavascriptInterface(getJavascriptObject(), "bridge");注:Java 对象定义如下,需要特别注意的是,在 JELLY_BEAN_MR1 之后,只有 public 且添加了@JavascriptInterface注解的方法才能被调用

private JavascriptObject getJavascriptObject(){return new JavascriptObject();}public class JavascriptObject{@JavascriptInterfacepublic final void showTitleBar(){binding.webView.post((Runnable)(() -> {binding.rlHeaderView.getRoot().setVisibility(View.VISIBLE);}));}@JavascriptInterfacepublic final void getCurrentLocation(@NotNull final String jsCallback) {binding.webView.post((Runnable)((Runnable) () -> {CharSequence var1 = (CharSequence)jsCallback;if (var1 != null && var1.length() != 0) {binding.webView.loadUrl("javascript:window." + jsCallback);}}));}}

getCurrentLocation方法就是h5调用客户端的方法,jsCallback是客户端给h5的回调方法

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。