chrome 更新到 76+ 后 Android webview 无法绘制画布
Posted
技术标签:
【中文标题】chrome 更新到 76+ 后 Android webview 无法绘制画布【英文标题】:Android webview can't draw canvas after chrome updated to 76+ 【发布时间】:2019-12-27 14:54:56 【问题描述】:我的 webview 在画布内具有绘图功能,工作正常。但在 Chrome 升级后,它停止在画布内绘图。我有一个解决方法,通过将硬件加速设置为 true,它可以完美运行,但问题是我的应用程序的内存消耗迅速增加。这个问题有什么解决办法吗?
我将 Cordova 用于跨平台。
【问题讨论】:
我也有同样的问题。我花了一整天的时间才找到解决方案。感谢您的工作。 【参考方案1】:好吧,我不了解 Cordova,但我认为这也可以帮助您。我发现解决 android webview 中 html5 画布问题的关键在于 AndroidManifest.xml。我必须做什么?我保留了使用混合(自定义)webview 的策略,因为当我在 Xamarin Forms 中为 ios 和 Android 开发时,我需要在两个平台上使用相同的解决方案。在 Android 上我做到了:
// Java (or similar [laughs])
// Enable hardware acceleration using code (>= level 19)
if (Build.VERSION.SDK_INT >= 19)
yourWebviewObj.setLayerType(View.LAYER_TYPE_HARDWARE, null);
else
yourWebviewObj.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
yourSettingsObj.setRenderPriority(WebSettings.RenderPriority.HIGH);
yourSettingsObj.setCacheMode(WebSettings.LOAD_NO_CACHE);
// Xamarin for Android
// Enable hardware acceleration using code (>= level 19)
if (Build.VERSION.SdkInt >= 19)
yourWebviewObj.SetLayerType (LayerType.Hardware, null);
else
yourWebviewObj.SetLayerType (LayerType.Software, null);
yourWebviewObj.Settings.SetRenderPriority(WebSettings.RenderPriority.High);
yourWebviewObj.Settings.CacheMode = CacheModes.NoCache;
最后,在 AndroidManifest.xml 中找到 android:handwareAccelerated="false"
,您可以将值从 false
更改为 true
。本技巧(另外)适用于 Java 世界和 Xamarin。
在Android WebView with layer_type_software not showing HTML5 canvas content 有另一个人遇到同样的问题,我也发布了同样的解决方案。抱歉,如果我的帮助还不够,但今天我使用 Xamarin 开发应用程序。无论如何,我相信走这条路会对你有所帮助。
【讨论】:
以上是关于chrome 更新到 76+ 后 Android webview 无法绘制画布的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Chrome v76 中隐藏“Chrome 正在由自动化软件控制”信息栏
升级到 Chrome 版本 76.0.3809.100 后的 ERR_INSUFFICIENT_RESOURCES