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

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可以禁止脚本关闭窗口,禁止移动窗口,禁止状态栏写入,禁止接收鼠标右键消息……这个列表还可以列得更长。加上了这些限制,您能做的事情就更少了,不过通常不需要关心那些选项,在大多数情况下,那些选项是为了对付一些烦人的代码(走马灯式的滚动状态栏、禁止右键的脚本等)而准备的,所以如果不想写那些让人讨厌的脚本,这些限制完全不用放在心上。

时间: 2024-11-03 15:41:20

《JavaScript精粹(修订版)》——1.2 JavaScript的限制的相关文章

《JavaScript精粹(修订版)》——导读

**前言**对很多人来说,提起JavaScript,常常伴随着很多不愉快的记忆,例如讨厌的弹出式窗口.恼人的鼠标尾迹,还有令人沮丧的禁止鼠标右键的脚本.如果常常遇到这些脚本,就知道那是多么乏味和无聊.不过,JavaScript确实是一种成熟.专业的脚本语言,广泛地应用于现在的大多数网站,而且,它也几乎是所有基于Web的应用程序的关键性组件.别奇怪,我们确实是在谈论同一种技术. 当然,回顾过去,我认为很多人对JavaScript的感受还是比较准确的:JavaScript确实名声不太好,随着大量网站

Javascript实例教程(7) 利用Javascript进行密码保护

javascript|教程 利用javascript进行密码保护 随着互联网的飞速发展,地球变得越来越小,人们可以跨越时间和空间得界限进行交流于合作.但是随之也产生了一些肆意搞破坏的黑客,这就使得程序设计人员在编制应用程序中要考虑到黑客袭击这个问题,所以自然而然地就会想到保护.本节教程将教你怎样利用javascript进行密码保护.利用javascript来对网页进行密码保护有几种方法.最早的一种方法是依耐于用户而不知道目标文件名,代码如下: <SCRIPT LANGUAGE="javas

Javascript实例教程(6) 利用Javascript进行密码保护

随着互联网的飞速发展,地球变得越来越小,人们可以跨越时间和空间得界限进行交流于合作.但是随之也产生了一些肆意搞破坏的黑客,这就使得程序设计人员在编制应用程序中要考虑到黑客袭击这个问题,所以自然而然地就会想到保护.本节教程将教你怎样利用Javascript进行密码保护.利用JavaScript来对网页进行密码保护有几种方法.最早的一种方法是依耐于用户而不知道目标文件名,代码如下: <SCRIPT LANGUAGE="JavaScript"><!-- function g

Pro JavaScript Techniques第七章: JavaScript与CSS

  JavaScript和CSS的交互是现代JavaScript程序设计的支柱.事实上对于所有的现代web应用程序来说,至少使用某些形式的动态交互是必须的.那么做过之后,用户可以更快地操作而更少地把时间浪费在等待页面加载上.将动态技术与第六章提出的事件方面的观念相结合,对于实现无缝而强大的用户体验是非常重要的. 层叠式样式表是用来对易用的.有吸引力的网页进行修饰和布局的事实标准,它在给用户提供最少的困难的同时为开发者提供最多的能力.当你将那一能力与JavaScript相结合时,你将能够构造强健的

嵌套的javascript 用children[0]为什么javascript代码没有执行呢

问题描述 嵌套的javascript 用children[0]为什么javascript代码没有执行呢 <head> <title>后台左侧导航页面</title> <style type="text/css"> .dc { display: none; margin-left: 10px; } </style> <script language="javascript"> function t

《JavaScript启示录》——1.21 JavaScript对象和Object()对象

1.21 JavaScript对象和Object()对象 不要将一般术语"JavaScript对象"与Object()对象混淆.前者指的是JavaScript中对象的概念.Object()对象(如var myObject = new Object())是JavaScript中表示的一个非常特殊的值.就像Array()对象是一种被称为array的对象类型,Object()对象是一种被称为object的对象类型.重点是,Object()构造函数生成空的通用对象容器,该容器叫做Object(

JavaScript知识点总结(六)之JavaScript判断变量数据类型_javascript技巧

最近做了一个项目,其中有关于js判断数据类型的处理,在网上搜了相关资料,并且亲自测试了各种数据类型的判断,绝对安全.下面小编把具体内容总结分享给大家,大家参考下! 一.JS中的数据类型 1.数值型(Number):包括整数.浮点数. 2.布尔型(Boolean) 3.字符串型(String) 4.对象(Object) 5.数组(Array) 6.空值(Null) 7.未定义(Undefined) 二.判断一个变量的数据类型 1.数值型(number) 比较常用的判断方法是: function i

JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别_javascript技巧

一.JavaScript"=="的作用 1.当==两边的内容是字符串时,则比较字符串的内容是否相等. 2.当==两边的内容是数字时,则比较数字的大小是否相等. 3.当==两边的内容是对象或者是对象的函数属性时,则比较内存地址是否相等. 二.==和===的区别 ==用于一般比较,===用于严格比较,==在比较的时候可以转换数据类型,===严格比较,只要类型不匹配就返回flase. 举例说明: <script type="text/javascript">

JavaScript可否多线程? 深入理解JavaScript定时机制_javascript技巧

例如 复制代码 代码如下: setTimeout( function(){ alert('你好!'); } , 0); setInterval( callbackFunction , 100); 认为setTimeout中的问候方法会立即被执行,因为这并不是凭空而说,而是JavaScript API文档明确定义第二个参数意义为隔多少毫秒后,回调方法就会被执行. 这里设成0毫秒,理所当然就立即被执行了. 同理对setInterval的callbackFunction方法每间隔100毫秒就立即被执行

Javascript代码混淆综合解决方案-Javascript在线混淆器_javascript技巧

 文章来源:javascriptOnlineObfuscator">http://www.BizStruct.cn/JavascriptOnlineObfuscator Javascript 代码混淆的目的 Javascript 是一种解释执行的脚本语言,主要应用于 Web 领域的客户端的浏览器中:由于 Javascript 解释执行的特性,代码必须明文下载到客户端,并且可以很容易的进行调试,使得 Javascript 代码的保护非常困难: 不同的人对 Javascript 代码的保护有不