Canvas Internet Explorer画布呈现不同的CJK通用字体

Canvas Internet Explorer画布呈现不同的CJK通用字体,canvas,html5-canvas,Canvas,Html5 Canvas,在IE11甚至Edge中,如果使用通用的.font像16px衬线渲染fillText,结果并不总是与使用完全相同的样式渲染DOM元素相同。看起来canvas元素不像DOM元素那样尊重lang属性,这会影响最终渲染的字体。标准浏览器似乎对此没有问题 CJK脚本将演示此问题。。。您可以使用今日は。。。请注意,即使将lang属性正确设置为ja,渲染的字体仍然不同 这里的用例是在画布中呈现通用字体,以与已知字体匹配,以编程方式查找给定浏览器/操作系统/语言组合使用的泛型,因此要求画布以某种方式强制表现为

在IE11甚至Edge中,如果使用通用的
.font
16px衬线
渲染
fillText
,结果并不总是与使用完全相同的样式渲染DOM元素相同。看起来canvas元素不像DOM元素那样尊重
lang
属性,这会影响最终渲染的字体。标准浏览器似乎对此没有问题

CJK脚本将演示此问题。。。您可以使用
今日は。。。请注意,即使将
lang
属性正确设置为
ja
,渲染的字体仍然不同


这里的用例是在画布中呈现通用字体,以与已知字体匹配,以编程方式查找给定浏览器/操作系统/语言组合使用的泛型,因此要求画布以某种方式强制表现为与DOM中呈现文本相同的行为,或者至少在某种程度上检测到它会有所不同。

Ps:由于无法确定使用的字体是什么(即使同一个单词中只使用了一种字体),第一步是将画布
字体设置为要检查的元素所具有的字体。然后,您可以比较通过的DOM大小和ctx.measureText().width,以删除明显不同的字体(FF中的差异为>=0.1px,IE不确定)。但是如果多重字体仍然匹配,你就没有办法了。再说一次,因为你甚至不能确定一种字体是否被使用,即使是在一个单词中,你就必须逐个字符地使用。我不会谈论我试图通过这个链接传达的是,即使对于一组已知的字符,也可以使用多种不同的字体。即使对于一组已知的字符,也可以使用多种不同的字体。当使用lang属性并且字符仅限于给定的脚本时,呈现的字体将是相同的,因此这不是真的。问题是如何使lang属性得到尊重。这就是用例。我已经更新了票证,以提供评论中讨论的额外上下文,但它基本上是无关的。这种方法在标准浏览器中运行良好,因此关于泛型的整个线程对这个问题毫无意义。问题是lang属性。实际上,即使lang属性不受尊重,如果字符都在同一个脚本中,它们也将使用相同的字体。问题是它与DOM呈现不匹配,而这正是lang属性发挥作用的地方。