《JavaScript精粹(修订版)》——1.2 JavaScript的限制

简介: JavaScript通常被作为一种客户端语言使用,这里所说的客户端,一般是指终端用户的Web浏览器。在浏览器中,JavaScript代码被解释并被执行,这一点和服务端语言截然不同。所谓的服务端语言需要运行在服务器,并发送一些静态数据给客户端,例如PHP、ASP等。

本节书摘来自异步社区《JavaScript精粹(修订版)》一书中的第1章,第1.2节,作者:【英】Edwards, J. , 【澳】Adams, C.著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.2 JavaScript的限制

JavaScript通常被作为一种客户端语言使用,这里所说的客户端,一般是指终端用户的Web浏览器。在浏览器中,JavaScript代码被解释并被执行,这一点和服务端语言截然不同。所谓的服务端语言需要运行在服务器,并发送一些静态数据给客户端,例如PHP、ASP等。

由于JavaScript根本无法和服务器的环境打交道,很多任务是通过PHP实现的,例如读写数据库,或者创建一个文本文件等。不过因为JavaScript可以与客户端环境交互,所以它能够根据客户端信息来做一些判断或操作,例如鼠标位置、元素的尺寸等,而这是服务端语言无法做到的。
什么是ActiveX?

如果您对微软的JScript已经很熟悉了,那么可能会想到“JavaScript也许可以通过ActiveX做些什么事”。没错,确实可以,不过ActiveX并不是ECMAScript的一个组成部分。ActiveX只是Windows操作系统的一种特别机制,以便Internet Explorer可以访问COM对象,而且通常ActiveX是运行于受信任的环境中的,例如Intranet。我们会很快遇到几个例外:InternetExplore中没有专门的安全设置的ActiveX控件(例如Flash插件,还有XMLHttpRequest)。但绝大多数情况下,对ActiveX的讨论不在本书范畴之内。
通常,在任何一台计算机上运行的客户端的能力总是没有服务器端强大,所以,JavaScript并不适合用来进行大量数据的处理。但是它对少量数据的即时处理能力对于客户端而言却有着莫大的吸引力,例如接受响应、验证表单等,这使得它成为一个完成此类任务的最佳选择。

但是,试图评价服务器端语言和客户端语言的优劣却是不必要的。这两种语言不具有可比性,它们只是针对不同任务的工具而已,两者的交集也并不多。然而,对于客户端脚本和服务器脚本的交互能力的需求却导致新一代Web脚本语言的产生,这种新脚本语言使用XmlHttpRequest来请求服务器数据,运行服务器端的脚本,同时在客户端处理结果。第18章将深入探讨这种技术。

安全性限制

正因为JavaScript可用于操作那些非常敏感的数据和程序,所以它的能力被严格地限制,以防止被人恶意使用。因此,JavaScript被禁止去做很多的事情。例如,它不能读取计算机的系统设置,不能操作硬件,也不能启动别的程序。

一些本来在JavaScript中被禁止的特殊的交互在特定的页面元素中也可以被允许。例如,修改< input>的值通常是没什么问题的,除非是一个文件上传区(例如,< input type="file">),往里面写入是被禁止的,因为这可以阻止恶意代码偷偷地让用户上传他本来不希望上传的文件。

还有很多类似的限制,本书将通过大量的例子和应用一一展示。但这里还是可以简单地总结一下,下面列出了JavaScript中由于安全问题而被禁止的操作:

  • 不能打开和读取文件(除非在特别的环境之下,相关内容会在第18章讨论);
  • 不能在用户的计算机上创建和编辑文件(除了cookie,相关内容在第8章讨论);
  • 不能读取HTTP post数据;
  • 不能读取系统设置,或者用户计算机上的任何其他数据,除非是语言本身提供的数据或者是环境提供的宿主对象(host object)1;
  • 不能修改文本输入区域的值;
  • 不能修改从其他域载入的document的显示方式;
  • 不能关闭和修改工具栏或者其他任何没有向脚本开放的窗口元素。

结果,JavaScript好像被禁止了太多的功能。

另外,还有一点值得注意。很多浏览器提供了更加精细的权限控制,而不仅仅是一个允许或禁止的选项。例如,Opera可以禁止脚本关闭窗口,禁止移动窗口,禁止状态栏写入,禁止接收鼠标右键消息……这个列表还可以列得更长。加上了这些限制,您能做的事情就更少了,不过通常不需要关心那些选项,在大多数情况下,那些选项是为了对付一些烦人的代码(走马灯式的滚动状态栏、禁止右键的脚本等)而准备的,所以如果不想写那些让人讨厌的脚本,这些限制完全不用放在心上。

相关文章
|
JavaScript 前端开发 数据安全/隐私保护
《JavaScript精粹(修订版)》——1.9 隐藏JavaScript源代码
网上有些程序宣称提供对源代码的加密,但其实没有什么加密方法能够保证别人无法解密。实际上,这些程序往往会造成麻烦,它们会重新格式化代码,这让代码运行更慢、更低效,甚至会因为错误而不能运行。想知道我的建议吗?干脆碰都不要碰那些所谓的加密程序。
1560 0
|
Web App开发 JavaScript 前端开发
《JavaScript精粹(修订版)》——1.4 为没有JavaScript的用户着想(渐进增强)
有时候,开发者可能会碰到除JavaScript之外再无更好的办法来实现功能的情况。这时,我认为用一些静态信息来提示用户网页遇到兼容性问题是合理的(当然,这些和技术无关)。不过,在大多数情况下,应尽量避免显示这种信息,除非它的确有意义而且是必须要告知用户的。
1200 0
|
JavaScript 前端开发 开发者
《JavaScript精粹(修订版)》——1.3 JavaScript的最佳实践
第一条原则可以在构建网站的时候提醒开发者,面临的用户多种多样。第二条原则使得维护代码的代价更小,同时,遇到不支持JavaScript的浏览器也可以提供无脚本的访问方式1。第三条原则则有助于编写出更易读、更清晰的代码。
1131 0
|
Web App开发 JavaScript 前端开发
《JavaScript精粹(修订版)》——第1章 JavaScript初步 1.1 JavaScript的定义
不过这种语言不是由Netscape公司独自开发的,虽然最初的开发由Netscape公司发起,但还有一家公司后来也参与其中,这就是微软公司。微软公司开发出了相似但又有一些不同的JScript,很明显,对于web脚本这样一种重要的应用,微软公司不希望落后于任何竞争对手。
1515 0
|
3月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
81 0
|
14天前
|
存储 移动开发 JavaScript
学习javascript,前端知识精讲,助力你轻松掌握
学习javascript,前端知识精讲,助力你轻松掌握
|
20天前
|
JavaScript 前端开发 测试技术
学习JavaScript
【4月更文挑战第23天】学习JavaScript
14 1
|
28天前
|
JavaScript 前端开发 应用服务中间件
node.js之第一天学习
node.js之第一天学习
|
2月前
|
运维 JavaScript 前端开发
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
发现了一款宝藏学习项目,包含了Web全栈的知识体系,JS、Vue、React知识就靠它了!
|
2月前
|
JavaScript
Vue.js学习详细课程系列--共32节(6 / 6)
Vue.js学习详细课程系列--共32节(6 / 6)
28 0