基于Xamarin.Forms.WebView的编辑器仅在Android 13上失败

mhd8tkvw  于 2023-04-03  发布在  Android
关注(0)|答案(1)|浏览(179)

打电话给所有的Xamarin Android大师-这个问题是远远超过我的头。
我有一个Google Play App Store产品在beta测试中,它正在经历灾难性的,可重复的,数据丢失导致的故障,与Xamarin.Forms.WebView相关仅限Android 13。请随意clone我的最小可重复的示例项目,具有Telerik.RadRichTextEditorSyncfusion.SfRichTextEditor的单独分支。据我所知,这两个组件都 Package 了WebViewWebView又 Package 了对本机Android控件的JavaScript调用。
我确实想强调的是,这在Android 12物理设备上已经工作了很长一段时间,没有任何问题。iOS项目也没有出现任何麻烦的迹象。
测试台很简单:单个页面上有一个编辑器,我们将一些HTML加载到该编辑器中。
克默尔

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:tkrtf="clr-namespace:Telerik.XamarinForms.RichTextEditor;assembly=Telerik.XamarinForms.RichTextEditor"
             x:Class="reproduce_android_13_webview_issue.MainPage">
    <Grid>
        <tkrtf:RadRichTextEditor x:Name="rteditor"/>
    </Grid>
</ContentPage>

C#

public MainPage()
{
    InitializeComponent();
    // rteditor.Source = TestHtml01; // PASS
    rteditor.Source = TestHtml02; // FAIL
}

当点击控件并打开软键盘时会出现问题。它是否工作取决于html。
第一个html源代码的行为 * 正确 * 时,编辑器是在文本的末尾点击设置光标,并开始编辑。

public const string TestHtml01 =
@"<html>
    <body>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sagittis ante id eros aliquet faucibus.</p>
        <p>Lore mi'ps umdol or si tame tc onse ct ETU etur adi piscinge lita liqu ams agitt is a NteIderOsew aliq ue.</p>
    </body>
</html>";


log-pass-telerik.txt
但是,在html的末尾添加一个字符,当WebView试图滚动到字符位置时,* 整个文档将被删除 *。

// In this source, a single character is added at the end of paragraph 2.
public const string TestHtml02 =
@"<html>
    <body>
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam sagittis ante id eros aliquet faucibus.</p>
        <p>Lore mi'ps umdol or si tame tc onse ct ETU etur adi piscinge lita liqu ams agitt is a NteIderOsew aliq uet.</p>
    </body>
</html>";

log-fail-telerik.txt
我还应该提到,即使第一个html源代码在开始时正确打开,但尝试实际编辑文本会在文档中产生不稳定的扭曲。

SfRichTextEditor(对比)

使用SfRichTextEditor,第一个html源代码仍然正常运行。带有额外字符的html仍然会改变(但不会破坏)文档数据。(从前导空格判断,似乎有不同的默认样式表。有“一些”差异似乎并不令人惊讶。)

log-fail-syncfusion.txt
log-pass-syncfusion.txt
我不知道这里发生了什么,我希望有内部知识的人可以提供一个解决方案,变通办法或至少是一个解释。当软输入打开并且高度改变时,它 * 闻起来 * 像是WebView试图ScrollToPosition。也许有一些字符串测量,其中字符索引可以转换为视图端口坐标。我的理由是,我排除了文本的长度作为问题。问题是,我可以在失败的源代码中将大写的'ETU'更改为小写的'etu',然后它就通过了。对我来说,这似乎是比例字体中的小写字母 * 更窄 *,即使字符数有 *,这也会产生差异。不管怎样,我花了几天时间才把这个隔离开来,我非常渴望得到一些见解,如果你有任何见解的话。

ccgok5k5

ccgok5k51#

用于测试的Android 13物理设备于2023年3月26日执行了自动软件更新,并安装了One UI版本5.1,该版本似乎解决了WebViewHybridWebView的问题。
为了呼应ToolmakerSteve的优秀评论,“追求所有途径”。这样或那样(无论我是否对此制造噪音有任何不同)对问题的认识被提高到了在操作系统层面得到修复的程度。

相关问题