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)
后缀的网址仍然有用,但已解析的网址现在会指向错误的位置。
答案 0 :(得分:1)
当控制台必须打印出源代码时,它会尝试以明确的方式执行此操作。选项卡字符显然不是选项卡,还有许多其他特殊字符具有相同的问题。因此,使用适当的转义序列呈现不可打印或不明显的字符,其中“适当”表示“适合语言上下文”。
CSS转义看起来像\nnnnnn
,其中n
是十六进制数字。可以有一到六个这样的数字。转义\9
是制表符的转义。
请注意,在实际的CSS源文本中,您也可以交替使用实际制表符和符号\9
并获得完全相同的结果,因为CSS解析器将\9
解释为单个制表符,就像一个真正的制表符。
所描述的控制台行为不是任何标准(因为开发人员工具本身并不是标准化的),但这种工具的任何设计者都很可能会这样做。