Avoiding losing tree builder output
Speculative tree building fails when document.write() changes the tree builder state such that the speculative state after the </script> tag no longer holds when all the content inserted by document.write() has been parsed. However, only unusual uses of document.write() cause trouble. Here are
几个需要避免的问题:
- 不要使用造成不平均树的写法,例如∶<script>document.write("<div>");</script> 要写成 <script>document.write("<div></div>");</script>
- 记得不要少写了结束符号,例如∶<script>document.write("<div></div");</script>
- 不要在写入的字串中使用 \r ,例如<script>document.write("Hello World!\r");</script>,应该使用 \n 代替<script>document.write("Hello World!\n");</script>
- Note that writing balanced tags may cause other tags to be inferred in a way that makes the write unbalanced. E.g. <script>document.write("<div></div>");</script> inside the head element will be interpreted as <script>document.write("</head><body><div></div>");</script> which is unbalanced.
- Don't let the semicolon of a named character reference be the last thing that is written. Due to a bug in Firefox 4 though 10 (fixed in Firefox 11), <script>document.write("foo ");</script> causes a speculation failure. However, <script>document.write(" foo");</script> is OK.
- TODO: document.write inside formatting elements.
- 本文为转载文章 [原文]
- 关键字 : script, write, document, 例如, unbalanced, state, inside, cause, builder, World, However, Hello, Firefox, 问题, 避免, 记得, 要写成, 结束符号, 应该使用, 少写
0 0
2012-01-12T10:06:00+0000