我应该完全停止使用内联JavaScript吗?

时间:2014-03-12 17:18:41

标签: javascript standards

在关于SO的其他地方的讨论中,我被告知“[m] ost浏览器现在不会执行内联javascript ......”这对我来说是个新闻,我一直在研究如何验证这个陈述,以便了解我是否需要调整我维护的某些网站上的代码,以使它们与未来的浏览器兼容。

据我所知,评论者指的是Content Security Policy,这是一个相对较新的提案,如果实施,将限制或完全禁用内联脚本。

但是,我注意到:

我的问题基本上是,我错了#3?内联JavaScript支持是否可能即将推出?


顺便说一句,我在SO上问这个问题,因为我认为它可能是一个“实用的,可回答的问题,这是软件开发所特有的”。如果其他人认为这太广泛或属于SE的其他地方,我想听听你的建议。提前谢谢!

3 个答案:

答案 0 :(得分:3)

如果默认情况下禁用内联javascript,那么有数亿个网页会停止工作。这样做的浏览器必须非常勇敢。

浏览器中的向后兼容性是好事和坏事(只需考虑IE!)。这是一件坏事,因为如果他们不必支持遗留代码,它们可以更轻更快,也是一件好事,因为否则,几乎没有任何人维护的数以亿计的有用网页几乎都会丢失。

认为没有浏览器,即使使用HTML5,也会强制执行严格的HTML规则,所以我怀疑内联javascript会被禁用。即使引入了一种方法,作为开发人员,您将有办法禁用该选项(甚至更好,而不是启用它)。

那就是说,我是第一个在我自己的网站上启用它的人,因为我讨厌内联代码。我的建议:除非绝对必要,否则永远不要使用它。

答案 1 :(得分:2)

就像评论所说的那样,无论谁说错了。

但是,你仍然应该停止使用内联JavaScript(例外,像Angular这样的框架),因为这是不好的做法。关注点应该分开。例如:

<someElement onlick="func()">Derp</someElement> // this is bad.
someElement.addEventListener("click",func,false); //this is much better

它更容易阅读,在更大的应用程序中,它更容易维护,尤其是在单独的文件中。

它仍然会采取相同的行动,是的,但根据我的经验,调试内联j的问题比我使用外部脚本时遇到的问题要多得多。

答案 2 :(得分:0)

浏览器将执行内联JavaScript

如果启用了JavaScript,则所有浏览器都会执行内联JavaScript。谁告诉你这是错的。

默认情况下,浏览器可能会继续执行内联JavaScript。

内联JavaScript是使一段脚本在页面中的特定点发生的最简单方法。互联网是民主的。你不需要成为一名计算机科学家就可以将一个可渲染的HTML页面与一些闪烁的文本和一只跳舞的企鹅混在一起。这就是网络应该如何。

此外,有时能够将内容管理的JSON对象从HTML传递到静态脚本是有用的。任何删除此功能的浏览器都会立即变得不那么有用,人们会迁移出去。

内联JavaScript的问题(为什么这实际上是一个好主意)

允许内联JavaScript使跨站点脚本(XSS)攻击变得相当容易。攻击者将一些JavaScript输入到Web表单(可能是注释框)中,然后服务器将该脚本呈现给页面。然后,该脚本可以执行诸如窃取登录凭据或重定向到包含恶意软件的其他页面之类的操作。

目前,XSS必须基于每台服务器进行处理,并且它实际上比您想象的更难,因为有很多方法可以执行脚本。实现一个关闭内联脚本的简单头元素将是一种更容易防范所有XSS的方法。

最佳做法是尽可能不使用内联JavaScript

您应该三思而后行使用内联JavaScript。关注点分离(HTML5表示意义,CSS3表示样式,JavaScript表示行为)仍然是很好的做法。它更整洁,更容易维护。此外,通过将JavaScript分成单独的文件,您可以获得缓存的好处。每次查看您网站上的网页时,都不需要下载该脚本。

优化纯粹速度

例外情况是你要优化速度。将文档内嵌到文件末尾将确保您的内容尽快显示。这是谷歌喜欢的一种技术。我不会亲自抓住它,因为它会使您的代码变得混乱,但它会使页面内容稍微快一点。