.getComputedTextLength()在IE和Chrome中返回不同的值
.getComputedTextLength() returns different values in IE and Chrome
我在编写一些小程序时遇到了一个问题。有一个SVG文本节点:
textMeasureNode.style.cssText
"font-family: "Open Sans", Arial, Helvetica, sans-serif; font-size: 22px; font-style: oblique; font-weight: normal; fill: #333333;"
and
textMeasureNode.textContent
"Q1"
当我调用函数时:
textMeasureNode.getComputedTextLength()
我在IE和Chrome中得到了不同的值。
IE:
49.269996643066406
铬:
29.34765625
似乎font-style: oblique
影响了这些结果。有人遇到过这个问题吗?
我在Chrome、Safari和Firefox中对此进行了一些测试,每种渲染的长度都略有不同。你肯定看到了一些意想不到的行为。它不是Open Sans特有的,也不是倾斜的(不同的风格会在不同的浏览器中改变不同的长度)。即使包含回退字体也显著改变了Chrome的长度(但FireFox或Safari没有)。我的最佳猜测是,这是由于每个浏览器选择如何在SVG中呈现字体,所以最好不要使任何内容依赖于特定的长度。
在SVG规范中,getComputedTextLength()被定义为:
呈现此元素中所有字符的所有前进值的总和,包括字形上的前进值(水平或垂直),属性"紧排"、"字母间距"answers"单词间距"的影响,以及由于属性"dx"answers"dy"对"tspan"元素的调整。
因此,有很多可变因素会影响句子的长度,如果你尝试一个相当长的句子(有很多字形、空格等),差异会更明显。让它在不同浏览器之间变化并不是一种理想的行为,但考虑到构建网络浏览器的所有限制,这可能是合理的。
相关文章:
- getBoundingClientRect在Chrome中返回相同的值
- chrome.storage.sync.get未返回值-Angular服务
- JQuery BlockUI鼠标加载光标没有't在Google Chrome中返回默认值
- 为什么像 Firefox 和 Chrome 控制台中的 '}{' 这样的结构会返回 'undefined'?
- 在 iOS Chrome 中返回页面时恢复表单值
- 可以't在Chrome扩展上返回所选文本
- phantomjs和chrome在调用canvas.toDataURL时返回不同的数据
- window.open在chrome扩展中返回undefined
- 当JS在Chrome控制台上正常工作时,Selenium JavaScript执行器返回null
- 当chrome检查器为jQuery变量返回[object object]时,如何返回实际数据
- 自定义Angular.js过滤器在IE8中不返回任何内容,在Chrome/FF中运行良好
- Chrome返回未定义的cancelFullScreen和网络工具包cancelFullScreen
- chrome.tabs.onUpdated返回了一个没有'不存在
- jQuery ajax POST在chrome中返回错误
- 后台位置的计算样式在Chrome中返回0%0%
- window.frames.length在chrome和Firefox浏览器中返回0
- InnerText在内容脚本Chrome扩展中返回未定义的内容
- Chrome桌面中的ondevicement返回true
- .getComputedTextLength()在IE和Chrome中返回不同的值
- 根据chrome.storage中的数据返回chrome.webRequest.onBeforeRequest的值