百科问答小站 logo
百科问答小站 font logo



为什么把 Script 标签放在 body 结束标签之后 html 结束标签之前? 第1页

  

user avatar   he-shi-jun 网友的相关建议: 
      

Google并没有把<script>插入在</body>之后,而只是没有写</body>和</html>闭合标签。 【这样做是符合标准的。不仅是html5标准,从第一个HTML正式标准HTML 2.0开始,这样做都是允许的。相反,在</body>之后插入其他元素,从HTML 2.0起就是不合标准的。】

新浪微博确实有在</body>之后输出<script>。

新浪微博所用的doctype是XHTML 1.0,但是其response的content type头并没有用XHTML mimetype,所以浏览器仍然会按HTML语法进行parsing。【顺便说一句,虽然新浪微博用了XHTML 1.0 DTD,但是其实际内容连well-formed也没有做到,是典型的挂羊头卖狗肉的XHTML。新浪的前端同学们应该检讨一下啊!当然了,腾讯微博也是用XHTML 1.0的DTD,并且也不是well-formed的,跟新浪微博是难兄难弟啊!如果说一定要较个高下,那企鹅还是略胜一筹——其网页出现第一个解析错误的行数更靠后一点。】

按照HTML5标准中的HTML语法规则,如果在</body>后再出现<script>或任何元素的开始标签,都是parse error,浏览器会忽略之前的</body>,即视作仍旧在body内。所以实际效果和写在</body>之前是没有区别的。

总之,这种写法虽然也能work,但是并没有带来任何额外好处,实际上出现这样的写法很可能是误解了“将script放在页面最末端”的教条。所以还是不要这样写为好。

【补充】

有同志说因为新浪微博使用bigpipe,所以“从直觉触发,为了避免浏览器出现未知异常,应该在首次吐出的页面框架中闭合body”。但是这个逻辑上说不通。因为在body以外写script也可能存在其他异常嘛。有什么理由能让开发者推断出后者会更安全呢?实际上在没有充分测试的前提下,如果要进行推断,那么可以推断出后者的风险更大。

第一,这是不合标准的行为,而且从有HTML标准以来都是不合标准的,因此浏览器实现不一致或者在这种情况下有bug的风险显然更大。

第二,虽然将<script>写在</body>之后,但最终的DOM树里,<script>元素还是会成为body的子节点,这一点很容易在firebug等调试器里验证。既然如此,如果将<script>写在</body>之前会有问题,你又如何保证写在之后(并在DOM里又变成了和写在之前一样的结构)就没有问题?




  

相关话题

  干HTML5这行,必须拥有美术功底吗? 
  HTML5标准完工意味着什么? 
  在国内前端领域里优秀的人很多,为什么没人做出 angularjs 、jQuery 之类优秀的框架? 
  如何优雅地将程序设计语言的名字翻译成汉语? 
  为什么前端不能一直做?难道要转行?? 
  请问一下各位大佬,js的静态方法有啥作用呀,写工具类吗,小菜鸡想不出来静态方法有啥作用? 
  用JavaScript做其他语言擅长的事情“好”么? 
  为什么try catch能捕捉await后promise错误? 和执行栈有关系吗? 
  现在整个 Web 前端是「屎山」吗? 
  避免使用 eval、new Function 的方法可以降低 XSS 攻击的风险吗?为什么? 

前一个讨论
计算机专业毕业生不会并且不用 Excel 里的 vlookup 功能理所应当吗?
下一个讨论
快手14岁少女怀孕,学校吸烟一大堆,学生们脏话不绝于耳,学生打架事件层出不穷这种现象到底说明了什么?





© 2024-09-19 - tinynew.org. All Rights Reserved.
© 2024-09-19 - tinynew.org. 保留所有权利