CSS Id 选择器阻止所有内容在 Android 10 上的 Xamarin.Forms WebView 中显示

Posted

技术标签:

【中文标题】CSS Id 选择器阻止所有内容在 Android 10 上的 Xamarin.Forms WebView 中显示【英文标题】:CSS Id selector stops all content from showing in Xamarin.Forms WebView on Android 10 【发布时间】:2021-10-02 20:13:32 【问题描述】:

我有一个 WebView,我将一个 html sn-p 分配给使用分配给 SourceHtmlWebViewSource

自从面向 android 10 以来,WebView 已停止显示所有内容。

我已经缩小了一个字符的范围,它可以区分内容显示和不显示内容。 HTML 包含一个<style> 部分。如果它包含...

hello 

...然后显示内容。好像它包含...

#hello 

...然后没有内容显示。 (hello 不涉及任何内容。)

显然,# 字符表示一个 Id 选择器。

那么,为什么针对 Android 10 会突然因为 CSS 中如此简单的更改而让我的 HTML 停止显示?

我进一步缩小了范围。在<head> 标签中...

<style>#</style> -> 没有 HTML 显示

<style></style> -> HTML 显示。

<style>.</style> -> HTML 显示。

我仍在使用 Xamarin.Forms 4。

【问题讨论】:

【参考方案1】:

下面的代码对我有用。请检查一下。

<!DOCTYPE html>
<html>
<head>
<style>
/* Style the element with the id "hello" */
#hello 
  background-color: lightblue;
  color: black;
  padding: 30px;
  text-align: center;


/* Style all elements with the class name "Line" */
.Line 
  background-color: #9815B0;
  color: white;
  padding: 10px;

</style>
</head>
<body>

<!-- An element with a unique id -->
<h1 id="hello">Page1</h1>

<!-- Multiple elements with same class -->
<h2 class="Line">Line1</h2>
<p>number 1.</p>

<h2 class="Line">Line2</h2>
<p>number 2.</p>

<h2 class="Line">Line3</h2>
<p>number 3.</p>

</body>
</html>

【讨论】:

当我删除 我实际上有几个 WebView。每一个都包含在一个 AbsoluteLayout 中,然后将一组布局分配给此控件 github.com/AndreiMisiukevich/CardView 的数据源。我使用 HTML sn-ps 的原因是因为当我尝试设置每个 WebView 的 Url 时,这个设置崩溃了。所以它是 UI 密集型的。【参考方案2】:

我解决了这个问题。我正在使用从 WebView 派生的类和自定义渲染器,该渲染器继承自...

ViewRenderer<MyWebView, Android.Webkit.WebView>

我不知道我为什么这样做。它至少使人们能够从相关类(处理 javascript)中引用渲染器上的方法,而不必将渲染器上的 Element 强制转换为从 WebView 派生的自定义类。

因此,我让自定义渲染器继承自标准 WebViewRenderer,并删除了创建本机控件并加载其 HTML sn-p 的代码,现在已自动处理。原生WebView的自定义跟以前一样。

我不知道为什么我不能再创建自己的原生 WebView 而不会遇到这个奇怪的错误。

【讨论】:

以上是关于CSS Id 选择器阻止所有内容在 Android 10 上的 Xamarin.Forms WebView 中显示的主要内容,如果未能解决你的问题,请参考以下文章

相当于Android视图的CSS类选择器?

010. CSS 选择器

css选择器

uni-app支持的css选择器

css选择器

CSS3选择器入门