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

问题描述 投票:0回答:0

召集所有 Xamarin-Android 专家 - 这个问题让我头疼。

我在 Beta 测试中有一个 Google Play App Store 产品正在经历灾难性的、可重复的、导致数据丢失的故障,这些故障与

Xamarin.Forms.WebView
仅在Android 13 上有关。随时 clone 我的最小可复制示例项目,带有
Telerik.RadRichTextEditor
Syncfusion.SfRichTextEditor
的单独分支。据我了解,这两个组件都包装了
WebView
,后者又包装了对本机
Android
控件的javascript调用。

我想强调的是,这已经在 Android 12 物理设备上运行了很长时间,没有任何问题。 iOS 项目也没有任何问题。


测试平台很简单:单个页面上有一个编辑器,我们将一些 html 加载到该编辑器中。

Xaml

<?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 一样。也许有一些字符串测量值可以将字符索引转换为查看端口坐标。我的理由是我排除了文本的length问题。问题是,我可以将失败源中的大写“ETU”更改为小写“etu”,然后它通过。对我来说,这似乎是比例字体中的小写字母 narrower,即使字符数 not 改变,这也会有所不同。不管怎样,我花了几天时间才把它隔离开来,如果你有任何见解,我非常渴望得到一些见解。

c# android xamarin webview rich-text-editor
© www.soinside.com 2019 - 2024. All rights reserved.