Javascript开发
一,概述
三,运行模式:
不同于服务器端脚本语言,例如ASP,JavaScript是客户端脚本语言,也就是说JavaScript是在用户的浏览器上运行,不需要服务器的支持而可以独立运行。所以在早期程序员比较青睐于JavaScript以减少对服务器的负担,而与此同时也带来另一个问题:安全性。而随着服务器的强壮,虽然现在的程序员更喜欢运行于服务端的脚本以保证安全,但JavaScript仍然以其跨平台、容易上手等优势大行其道。
JavaScript是一种解释语言,其源代码在发往客户端执行之前不需经过编译,而是将文本格式的字符代码发送给客户端由浏览器解释执行。但这种语言的弱点是容错性较差,如果一条执行不了,那么下面的语言也无法执行,而且由于一条一条的解释,速度较慢。
与其相对应的是编译语言。例如Java。Java的源代码在传递到客户端执行之前,必须经过编译,因而客户端上必须具有相应平台上的仿真器或解释器,它可以通过编译器或解释器实现独立于某个特定的平台编译代码的束缚。但是它必须在服务器端进行编译,这样就拖延了时间。但因为已经封装,所以能保证安全性。
五,网页中使用
JavaScript的主要用途是直接写入或接外部包含在HTML网页中,和文档对象模型(DOM)互动,如: 打开或弹出编程控制大小,位置等属性的新窗口。 网页表单输入验证值,以确保把能接受的值提交到服务器。 在鼠标移动到图片时改变图片:常用来提请用户注意显示的图形元素的重要环节。
因为JavaScript代码可以在本地运行于用户的浏览器(而不是在远程服务器上),所以它可以快速响应用户操作。此外,JavaScript代码可以检测到用户的行为,如响应用户按键。诸如Gmail就使用了大量JS,Ajax编程更是如此。
一个JavaScript引擎(JavaScript解释器,JavaScript执行器),是翻译的解释JavaScript源代码,并执行相应的脚本。第一个JavaScript引擎是由网景的Brendan Eich为Navigator 浏览器开发的代号为SpiderMonkey的引擎,采用C来实现。JavaScript 1.5版后SpiderMonkey根据ECMA262V3版做了更新。Rhino引擎由Norris Boyd开发,由JAVA实现,也符合ECMA262V3版。
Web浏览器是JS目前最主要的宿主环境。 Web浏览器通常使用公共API创建对应于DOM的宿主对象。Web服务器是JS引擎的另一个应用,一个JS Web服务器会响应一个HTTP请求,调用 主机对象,这样JS就可以处理生成动态网页。
Web服务器是另一个发动机常见应用。一个JavaScript网络服务器会令宿主对象代表一个HTTP请求和响应对象,JavaScript程序便可以操纵的动态生成的网页。
一个包含JavaScript标准的网页(HTML 4.01语法)最小例子是:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head><title>simple page</title></head> <body> <script type="text/javascript"> document.write('Hello World!'); </script> <noscript> Your browser either does not support JavaScript, or you have JavaScript turned off. </noscript> </body> </html>
1 兼容性的考虑 因为JS目前是唯一被主流浏览器广泛支持的脚本语言,所以它意外地成为许多编程语言框架的目标语言。除了JS本身动态特性导致的运行局限性以外,JS引擎的快速增长也带来了兼容性问题。
DOM不属于ECM262标准,而属于另外由W3C制定的网页标准,而该标准并未统一所有浏览器,且并非所有浏览器都支持JS。
为了处理上述差异,JS开发人员在试图编写适用于所有主流浏览器的JS代码失败后,编写了检查浏览器对JS支持状况的代码。开发人员就可以根据该检测结果而编制相应代码。当然,开发人员也可以使用成熟的考虑过浏览器差异的代码库或工具包。
而且,JS代码也不支持所有的用户,诸如:使用低版本或罕见的不完全或不正常支持DOM的浏览器;使用不支持JS的PDA或手机;因安全或适用于盲人等原因而禁用JS运行。为了支持上述用户,开发人员可以尝试创建可以在不支持JS的浏览器上正常运行的网页。
2 安全 JS和DOM的互动给流氓软件以可趁之机。浏览器通过两种策略规避风险。 一是把JS置于沙盒中运行,这样JS就只能进行与网页相关的操作, 二是采取限制同源脚本策略.不同站点的JS脚本不能互相访问敏感信息如用户名密码cookie等。
2.1跨站点漏洞 XSS 常见的JS安全问题为跨网站脚本攻击(跨站点漏洞,跨网站指令码,Cross-site scripting,XSS,甚至有简写为CSS)是一种网站应用程式的安全漏洞攻击,允许恶意使用者将恶意程式码注入到网页上,其他使用者在观看网页时就会受到影响,如盗窃网络银行敏感用户资料。这类攻击通常包含了HTML以及使用者端脚本语言。避免XSS的方法主要是在显示不可信任数据时,将使用者所提供的内容进行过滤(HTML escaping),一般脚本语言都有提供对HTML的过滤。
另一种跨站点漏洞是跨站请求伪造(Cross-site request forgery,CSRF,通常缩写为CSRF或者XSRF,one click attack,session riding)是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。避免该漏洞的解决方法是在提交表单的隐藏域里面包含秘密验证信息,作为cookie之外的验证,以验证任何可能有持续效果的请求。另一个可选的方法是“双提交”cookie。此方法只工作于Ajax请求,但它能够作为无需改变大量form的全局修正方法。检查HTTP Referrer header也很有用。而对安全产生“副作用”的请求应该总使用Post方式发送。
JavaScript劫持(JavaScript hijacking)是CSRF攻击的一种形式,利用<script>攻击目标网站的一个页面以获取隐私的JSON或JavaScript的信息。可行的解决方法包括对每个返回私密JSON(即使其无side effects)的响应进行对POST和GET参数的验证,对可能返回私密JSON的请求只使用POST而不用GET,修改响应内容以避免其中<script>标签的使用(如把JSON包含于JS comment内)
2.2 错误地信任客户端
开发C/S程序要考虑到无论程序包含JS与否,不信任的客户端都有可能处于攻击者控制之下。因此任何嵌入JS中的私密信息都可能被攻击者获取。而且JS也可能不会甚至完全不会正常执行。
网站开发者无法隐蔽JS的运行情况,因为JS代码是送往客户端执行的,而且混淆加密的代码可能会被破解。
JS表单验证仅方便了客户,而非利于安全。服务器端最好也要加上验证。
JS有可能被浏览器设置为禁止运行,所以用JS来禁用”图片保存为”等是不可靠的。
在JS中嵌入密码(很容易被窃取)然后使用JS验证密码成功后传递”password_ok=1”(很容易被伪造)回服务器是很不安全的。
2.3 浏览器和插件的编码错误
浏览器使用JS来增强功能,但是可能会有缓冲溢出等漏洞,让攻击者有机可乘。该漏洞影响了包括Firefox,Internet Explorer,Safari等。
浏览器的插件如video players, Adobe Flash和IE默认可执行的大量ActiveX控件,都可能成为攻击的漏洞。
MS在Vista中试图通过限制IE进程的权限以避免缓冲溢出漏洞。Google Chrome则限制页面在一个操作系统强制执行型的沙盒中渲染。
2.4沙盒实现错误
浏览器通常被授权可以在沙盒外运行JS,如创建删除文件。IE和Firefox都曾对Web页面中的JS进行了不当的授权,xp sp2就对IE中的JScript降低了权限。而Windows允许本地的JS文件以通用的非沙盒方式运行,这就使得JS如同VBScript一样理论上可以成为木马的载体,虽然实践中JS木马并不常见。
六,网页外使用
在网页之外,JS解析器内嵌于众多工具中。这些工具应用虽然提供了各自不同的对象模型以供访问,而核心JS语言是几乎一致的。
ActionScript, Adobe Flash中的脚本语言,符合ECMAScript标准
Apple's Dashboard Widgets, Microsoft's Gadgets, Yahoo! Widgets, Google Desktop Gadgets, Serence Klipfolio 都是JavaScript的实现.
Mozilla平台,是构成Firefox等浏览器的基础,在其众多产品中使用JS实现用户界面(GUI).
Adobe的Acrobat和Adobe Reader(前身为Acrobat Reader)在PDF文件中支持JavaScript.
Adobe Creative Suite的成员,包括Photoshop, Illustrator, Dreamweaver和InDesign,都支持JS脚本编程.
Microsoft的 Active Scripting技术支持与JS兼容的JScript成为一种操作系统级别语言。
Java在版本SE 6 (JDK 1.6)中引入javax.script包,包含了一个基于Mozilla Rhino的JS实现. 因此Java程序可以允许脚本编程访问程序的变量和对象,如同浏览器可以允许JS编程访问网页的DOM对象。
Qt C++ 工具包包括一个用于JavaScript的QtScript模块, 作用类似于javax.script。
OpenOffice.org office application suite允许JavaScript为其脚本语言.
Adobe Integrated Runtime是一种允许开发者创建桌面程序的JavaScript运行时.
Cycling'74的音乐互动开发软件Max/MSP提供一个JS模型,比旧的编程模型的控制更为精确。
Late Night Software的JavaScript OSA (aka JavaScript for OSA, JSOSA)是Mac OS X的AppleScript的免费替代品.它基于Mozilla 1.5 JavaScript实现,且附加了可供操作系统与第三方应用互动的MacOS object对象.
ECMAScript was included in the VRML97 standard for scripting nodes of VRML scene description files.
Some high-end Philips universal remote panels, including TSU9600 and TSU9400, can be scripted using JavaScript.
Sphere是开源跨平台的RPG游戏引擎,可以制作JS编程的RPG游戏。
The open-source Re-Animator framework allows developing 2D sprite-based games using JavaScript and XML.
Methabot is a web crawler that uses JavaScript as scripting language for custom filetype parsers and data extraction using E4X.
游戏引擎Unity支持三种脚本语言: JavaScript, C#, Boo.
DX Studio (3D engine) uses the SpiderMonkey implementation of JavaScript for game and simulation logic.
webOS使用JS实现的WebKit作为程序框架一部份。
CA,_Inc.'s AutoShell cross-application scripting environment is built on JavaScript/SpiderMonkey with preprocessor like extensions for command definitions and custom classes for various system related tasks like file i/o, operation system command invocation and redirection and COM scripting.
Maxwell Render提供一个符合ECMA标准的脚本语言用于任务自动化。
七,调试
开发大型关键项目时,JS调试器非常重要。因为它可以分析在各种浏览器之间的执行差异,尤其是DOM方面,以达到一个脚本适用各个浏览器的目标。
主流浏览器一般都提供了脚本调试器,如Internet Explorer, Firefox, Safari, Google Chrome, Opera.
IE提供了三种调试器:功能最丰富的Microsoft Visual Studio(Microsoft Visual Web Developer Express提供的免费调试器功能有限制),Microsoft Script Editor (Microsoft Office的一个组件),免费的Microsoft Script Debugger。
Firefox可以使用Firebug插件或更早的Venkman调试器来调试网页应用。Firefox也有一个内置的简单的Error Console, 记录和测试JS,也记录CSS错误和警告等。
Opera提供DragonFly工具包.
Safari提供的WebKit's Web Inspector包含一个JS调试器。
一些调试工具本身就由JS编写而在web运行,JSlint扫描代码,Web development bookmarklets和Firebug Lite不同点在于跨浏览器的JavaScript控制中心.
因为JS是解析型,弱类型,可能会应用于彼此不兼容的多种宿主环境,开发人员应考虑使JS代码尽量适用于各种环境,如果遇到不支持的环境则让Web应用程序平稳退化(degrade gracefully)。
二、 JavaScript基本数据结构
三、 JavaScript程序构成
四、 基于对象的JavaScript语言
五、 创建新对象
六、 使用内部对象系统
七、 窗口及输入输出
八、 WEB页面信息交互
九、 实现更复杂交互
参见
Javascript模板引擎分享 JavaScript Micro-Templating|
斯坦福CS基础课程教JavaScript | CS101 - Introduction to Computing Principles| Javascript诞生记|
Jquery幻灯片/焦点图 插件 KinSlideshow【11月1日更新】| jQuery date picker plug-in|
从无忧剥落的地区选择器| boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器| ExpBuilder Float Dialog v2.0Easy PopUp|仿51job选择地区|
点击复制的实现 (兼容多种浏览器)| zeroclipboardProvides "Copy to Clipboard" functionality for your web site using JavaScript and Flash |
JS优化痩身工具及恢复压缩的Javascript文件的可读性| Online JavaScript/CSS Compression Using YUI Compressor|
Nicholas C. Zakas vs John Resig 一场关于YUI3/jQuery的精彩辩论|
TX电话面试:关于浏览器的缓存,请求机制| 13.3 ASP.NET缓存功能| 浏览器缓存专题|
http://developers.solidot.org/article.pl?sid=10/04/24/0429226&from=rss|那些相见恨晚的 JavaScript 技巧|
春风得意的 jQuery| jquery.ajax中的缓存问题|
悟透JavaScript| 《悟透JavaScript》之 甘露模型(新)|
不可多得的Javascript(AJAX)开发工具 - Aptana| aptana优秀的JS编辑器IDE
开源JavaScript Flash Player(HTML5/SVG)
50 Fresh JavaScript Tools That Will Improve Your Workflow|
树形菜单 Graphic JavaScript Tree with Layout Easy DHTML treeview :: Simple Tree Menu Class: jQTree4PHP 用过一些JS-Tree控件之后的总结【将持续更新】 Better navigation with DHTML tree menus created with PHP and XML Js Tree is an open soure treeview control written in JavaScript. phpXplorer
50个令人叹为观止的JavaScript应用站点: COMSHARP CMS 写道 “随着诸如 jQuery, Mootools, Prototype 一类的 JavaScript 框架的崛起,Web 开发者们基于这些框架创建了众多令人叹为观止的效果。以下的50个站点全部基于 JavaScript,却拥有 Flash 一样的绚丽效果。在很多 Web 开发者看来,Flash 并不是他们的首要选择,因为 Flash 至今对搜索引擎仍是不透明的,另外,Flash 的渲染需要浏览器插件,而 JavaScript 的一切都是本地的(图文)。”
JSEclipse - 被 Adobe 收购的 Eclipse 下的 JavaScript 编辑工具 推荐一款很好的JAVASCRIPT,AJAX开发工具——Aptana;支持JQUERY,DOJO,PROTOTYPE,YUI等流行AJAX框架 怎样写一个通用的JavaScript效果库! aptana优秀的JS编辑器IDE 理解JavaScript中的事件 Javascript 代码混淆综合解决方案 - Javascript 在线混淆器 最亲密接触Dhtml&JScript开发细节
开源Objective-J和Cappuccino发布 Cappuccino是一种以桌面软件用户熟悉的方式开发web应用的开源开发框架。Cappuccino是使用新程序语言Objective-J的实现,该语言模仿了Objective-C,完全建立在JavaScript之上。程序员在Objective-J上写成的应用可以在客户端解释,因此没有任何插件。
类Cocoa的JavaScript框架宣布Ars Technica报道,一组开发者(三位USC毕业的热血青年)创造了[http://arstechnica.com/journals/apple.ars/2008/06/26/cocoa-on-the-web-280-north-objective-j-and-cappuccino 类似Objective-C的JavaScript扩展Objective-J,并将Cocoa移植了过来,改名叫Cappuccino]。他们应用此框架建立了一个[http://280slides.com/ web应用演示280 Slides],令人惊艳。苹果推出的开源平台SproutCore是试图向开发者提供一个类似Cocoa的开发模式,使用HTML、CSS和JavaScript去创造富web应用。而Cappuccino和Objective-J则是完全不同的方法。开发者Bouche说,“因为Cappuccino完全运行在客户端,因此不需要生成 HTML或CSS。如果你想在 Cappuccino上开发一个应用,你甚至不需处理HTML或CSS。你的整个开发界面都是在 Objective-J和Cappuccino内进行。Cappuccino集中于应用架构,可以很容易处理如何打开或保存文档,或者拷贝和粘帖等任务。我们还在Cappuccino内创建一个强大的图形引擎,你可以开发类似280 Slides的富应用。”开发者计划以开源方式发布整个框架和预处理程序,但没有提及将使用哪一种许可证。有开发者说它与[http://internet.solidot.org/article.pl?sid=08/06/18/1026206&tid=75 SproutCore]代表了两种对富 JavaScript Web 应用的开发方式的革命。
JSEclipse - 被 Adobe 收购的 Eclipse 下的 JavaScript 编辑工具
推荐一款很好的JAVASCRIPT,AJAX开发工具——Aptana;支持JQUERY,DOJO,PROTOTYPE,YUI等流行AJAX框架