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 自动播放政策 - Chrome 76

升级到 Chrome 版本 76.0.3809.100 后的 ERR_INSUFFICIENT_RESOURCES

Chrome禁止更新的办法

Chrome V75V76新版无法存为mhtml格式解决办法

布局在 Chrome 中无法正确呈现