为什么浏览器会在此样式属性中插入`\ 9`

时间:2016-04-14 14:28:38

标签: javascript css browser

http.get[js.Any]("url").future map {
  case response.status == 200 => true
  case _ => false 
}

以上代码(在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 ");" 后缀后面的选项卡)在Chrome或Firefox控制台中运行时,会输出显示的行,其中附加了.png的URL。那是为什么?

我已经读过\9仅针对特定版本的IE进行某种攻击,但为什么Chrome和Firefox会自动插入?

PS:为了获得额外的浏览器乐趣,您能猜出如果该URL是相对的并且您希望使用经典的\9 href技巧来解决它会发生什么?这是虚构的<a>域名会发生什么:

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) 后缀的网址仍然有用,但已解析的网址现在会指向错误的位置。

1 个答案:

答案 0 :(得分:1)

当控制台必须打印出源代码时,它会尝试以明确的方式执行此操作。选项卡字符显然不是选项卡,还有许多其他特殊字符具有相同的问题。因此,使用适当的转义序列呈现不可打印或不明显的字符,其中“适当”表示“适合语言上下文”。

CSS转义看起来像\nnnnnn,其中n是十六进制数字。可以有一到六个这样的数字。转义\9是制表符的转义。

请注意,在实际的CSS源文本中,您也可以交替使用实际制表符和符号\9并获得完全相同的结果,因为CSS解析器将\9解释为单个制表符,就像一个真正的制表符。

所描述的控制台行为不是任何标准(因为开发人员工具本身并不是标准化的),但这种工具的任何设计者都很可能会这样做。