为什么浏览器在此样式属性中插入“9”
Why are browsers inserting a `9` into this style attribute
var div = document.createElement('div');
div.style.cssText = "background-image: url('http://imgs.com/mouse.png ')";
div.style.cssText
//=> "background-image: url("http://imgs.com/mouse.png'9 ");"
上面的代码,即.png
后缀后面的选项卡,在 Chrome 或 Firefox 控制台中运行时,将输出显示的行,并在 URL 后附加'9
。为什么?
我读过'9
是某种仅针对特定版本的IE的黑客攻击,但是为什么Chrome和Firefox会自动插入它呢?
PS:为了获得额外的浏览器乐趣,您能猜出如果该URL是相对的并且您想使用经典的<a>
href技巧来解决它会发生什么吗?以下是在虚构的http://imgs.com
域上会发生什么情况:
var a = document.createElement('a');
// Actually parsed from the above response, not assigned manually
a.href = "/mouse.png''9 ";
a.href
//=> "http://imgs.com/mouse.png/9" (in Chrome)
//=> "http://imgs.com/mouse.png%5C9" (in Firefox)
因此,虽然带有'9
后缀的 URL 实际上仍然有效,但解析的 URL 现在将指向不正确的位置。
当控制台必须打印源代码时,它会尝试以明确的方式执行此操作。制表符显然不是制表符,还有许多其他特殊字符具有相同的问题。因此,不可打印或不明显的字符使用适当的转义序列呈现,其中"适当"表示"适合语言上下文"。
CSS 转义看起来像'nnnnnn
其中n
是十六进制数字。可以有一到六个这样的数字。转义'9
是制表符的转义。
请注意,在实际的 CSS 源文本中,您也可以互换使用实际制表符和表示法'9
并获得完全相同的结果,因为 CSS 解析器将'9
解释为单个制表符,就像实际的制表符一样。
控制台的描述行为不在任何标准中(因为开发人员工具本身不是标准化的(,但这是此类工具的任何设计人员都可能做的事情。
相关文章:
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 属性gridster项应插入到何处
- 手柄'img'单击事件并插入'alt'使用jQuery将属性转换为文本框
- 如何从动态属性将IMG插入DOM
- 选中复选框时插入名称属性
- 在主要的JavaScript引擎中,在JavaScript关联数组(动态对象属性)中检索/插入的复杂性是多少
- 是否可以在 HTML 标记中插入您的属性
- 扫描具有相同命名和插入值的所有数据属性-jQuery
- 为什么浏览器在此样式属性中插入“9”
- 在JavaScript中插入属性
- 如果我可以随时将任何属性插入对象,那么在javascript中创建类有什么用
- 如何在 Tinnymce 编辑器的插入链接弹出窗口中添加 rel 属性
- 在 XSLT 工作表中的 JavaScript 中插入属性的问题
- 环回 - 基于 id 以外的其他属性的 REST 更新插入/更新
- 如何在车把/Ember.js中插入动态{{属性}}
- 纯Javascript将文本插入中,不带属性
- 动态插入文件时触发 onload 属性.js
- 在数据库的1个属性中插入了多个值
- jQuery/Javascript向元素插入属性
- 使用javascript xml解析器在XMLnode中插入属性