将JavaScript嵌入HTML主体是不好的做法?

And*_*rew 83 html javascript

我正在研究的团队已经养成了<script>在HTML页面正文中随机位置使用标记的习惯.例如:

<html>
    <head></head>
    <body>
        <div id="some-div">
            <script type="text/javascript">//some javascript here</script>
        </div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

我以前没见过这个.它似乎适用于我测试过的少数浏览器.但据我所知,将脚本标签放在这样的地方是无效的.

我错了吗?我们在这样的div标签中放置脚本标签有多糟糕?我应该注意哪些浏览器兼容性问题?

bob*_*nce 86

这完全有效.

你不希望在标记中混合大量的代码块(更好地使用外部脚本),但它可能对以下内容有用:

  • 为渐进增强添加额外的绑定信息(这些数据很难适应类名或其他方法来隐藏属性中的扩展信息); 要么

  • 尽可能快地启动脚本增强(而不是等待窗口加载/文档就绪).这方面的一个例子是自动对焦,如果太晚发射可能会激怒.

您可能正在考虑<style>不允许使用的元素<body>(尽管大多数浏览器仍允许这样做).

  • +1为自动对焦; 有时候我的连接速度很慢,并且当被放回到第一个字段时,已经在其他地方(在最坏的情况下:输入密码)并不好玩. (11认同)
  • 但是,当只有一页并减少服务器查找时,嵌入 JS 会很有用。嵌入式 CSS 的故事也一样。但通常情况下,在使用具有相同 javascript 和 css 要求的模板时,最好将 javascript 代码和 css 分开放在单独的文件中以减少页面加载时间(使用有效的缓存标头)。 (2认同)

Kel*_*tex 15

实际上,这很常见.例如,Google的分析跟踪代码仅使用以下语法:

<script type="text/javascript">
  var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
  document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
Run Code Online (Sandbox Code Playgroud)

如果它对谷歌来说足够好......

  • -1 - 仅仅因为谷歌这样做并不意味着这是一个好习惯.常见!=好. (36认同)
  • 无论如何谷歌分析都过于复杂,他们使用JavaScript进行跟踪实际上是过度工程的一个很好的例子. (3认同)
  • @Keltex:代码并非无效,但声称这是一个好习惯,因为有些人使用它并不是一个有效的参数. (3认同)
  • 撇开话题,我总是被Google对unescape的不必要而奇怪的使用所激怒,因为escape / unescape是邪恶的(而x3C本来会更简单) 。 (2认同)

Poi*_*nty 5

它是有效的,并且有时很难避免,具体取决于您的服务器端框架和代码的性质。


Gal*_*Gal 5

正如一些人提到的,它是有效的、有效的并且被广泛使用。

就语义推荐(或至少用于推荐)而言,最佳实践是将脚本标签放置在标头内。

考虑到性能的更现代的最佳实践建议将脚本标签(外部和内联)放置在正文标签之前的右下角,以允许标记在任何 JavaScript 代码执行之前完全呈现。

为了更容易理解和维护代码,建议使用“unobtrusive JavaScript”,其中代码位于外部文件中并将事件绑定到 DOM(Google unobtrusive JavaScript)。

内联 JavaScript 很有用的一种情况是使用仅存在于服务器端的值来初始化变量,然后外部 JavaScript 代码将使用该变量。