【问题标题】:does Android WebView support getClientRects? Or there is a bug?Android WebView 是否支持 getClientRects?还是有错误?
【发布时间】:2012-09-28 17:51:13
【问题描述】:

我发现 Javascript 方法 getClientRects 总是只产生一个只有 1 个元素的数组,例如,即使它被多行 p 调用也是如此。我希望显示 p 的行数与显示的行数一样多,因为它比单行长。 Android WebView 是否支持此方法或存在错误?

【问题讨论】:

标签: javascript android html webview getclientrect


【解决方案1】:

<p> 元素是块元素,因此为块返回一个 ClientRect。未列出匿名内联框。所以,返回中的ClientRect 是正确的。

但是,内联元素(例如<span><em>)将为元素被分解的每一行报告一个ClientRect。那是因为这些盒子不是匿名的。

(从W3C CSSOM View Module specgetClientRects()规范的两行之间读取)

【讨论】:

  • 根据该文档,匿名框似乎被其子框替​​换,直到没有匿名框被留下
  • @P5music - p 中的匿名框没有子级。由内联元素(emspan 等)创建的框不是匿名的,但它们也不是其他内联框的子元素。
  • 从文档中我了解到,目标是产生一个元素由它们的矩形组成的框。如果他们是匿名的,他们将被儿童取代;最终,最深的孩子(如果有的话)都会计算出他们的矩形,无论是匿名/非匿名的。如果我没记错我的早期测试(另请参阅我上面另一个 SO 问题的链接),Internet Explorer 和 WebBrowser .NET 控件将矩形计算为预计。
  • 看看quirksmode.org/dom/w3c_cssom.htmlquirksmode.org/dom/tests/rectangles.html 的例子——没有子元素(只有文本)的 p 有一个矩形,除非块框被打破由于某种原因,CSS 盒模型布局。包含文本的匿名子内联框没有任何子级,并且无论文本是否适合一行,都会被忽略。所有浏览器都同意这一点——一个矩形。将一些内联元素放入段落中,规范说 这些 子框列在 ClientRectList 中。更多,下一条评论...
  • 嗯。查看 quirksmode 测试页面... Chromium 浏览器做了一些更有意义的事情。单击 p 的直接子文本(不在 em 中)会得到一个矩形 - p 的块框。单击任何 元素会给出一个框 - 文本的内联框(在元素被分成几行时具有尽可能多的矩形)。单击非常大的 <em> 会给出多个矩形。有 3 个 框,根据 CSS 框模型,<em> 被子 元素分成 4 个伪元素框。这给出了 7 个内联框...
猜你喜欢
  • 2014-03-10
  • 1970-01-01
  • 2012-01-06
  • 2012-03-09
  • 2012-03-17
  • 2012-05-22
  • 2011-06-09
  • 1970-01-01
  • 2021-11-28
相关资源
最近更新 更多