百科问答小站 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里又变成了和写在之前一样的结构)就没有问题?




  

相关话题

  避免使用 eval、new Function 的方法可以降低 XSS 攻击的风险吗?为什么? 
  如何绕过知乎对 Bookmarklet 跨域添加的 <script> 的限制? 
  Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么? 
  为什么知乎前端圈普遍认为H5游戏和H5展示的JSer(负责前端界面工作的程序员)不属于前端工程师呢? 
  为什么前端不能一直做?难道要转行?? 
  如何看待 Adobe 宣布 2020 年停止 Flash 更新? 
  设计闭包(Closure)的初衷是为了解决什么问题? 
  为什么尤大说react的性能不如vue? 
  如何衡量一个人的 JavaScript 水平? 
  如何评价微信小程序内嵌网页功能开放? 

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





© 2024-11-05 - tinynew.org. All Rights Reserved.
© 2024-11-05 - tinynew.org. 保留所有权利