`
足至迹留
  • 浏览: 485692 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论

<1> web浏览器中的javascript

 
阅读更多
参考资料:《javascript权威指南》客户端javascript部分。

一、web浏览器中的javascript
在web浏览器作为上下文运行javascript的范围内,通常称为客户端javascript。

Window对象是所有客户端Javascript特性和API的主要接入点,它表示web浏览器的一个窗口或窗体,并且可以用标识符”window”来引用它,window实际上是一个Window对象引用自身的属性。Window对象定义了一些属性,比如指代Loaction对象的location属性,Location对象指定当前显示在窗口中的url,并允许脚本往窗口里载入新的url,会立即跳转:
// 设置location属性,从而跳转到新的web页面
window.location = http://www.***.com


在客户端JavaScript中,window对象也是全局对象。这意味着Window对象处于作用域链的顶部,它的属性和方法实际上是全局变量和全局函数,使用全局变量和属性不需要显式的使用window来引用。上面的例子也可以直接用:location = http://www.***.com

Window对象其中一个重要的属性是document,它引用Document对象,后者表示显式在窗口(window对象)中的文档。Document对象有一些重要方法,比如getElementById()。
Window, Document, Element对象上有很多重要的属性和方法,后面会详细讲到。

1. Web文档(document)里的javaScript
JavaScript程序可以通过Document对象和它包含的Element对象遍历和管理文档内容。它可以通过操纵CSS样式和类,修改文档内容的呈现;并且可以通过注册适当的事件处理程序来定义文档元素的行为。内容、呈现和行为的组合,叫做动态html或DHTML。

Web文档里应当少量使用JavaScript,因为Javascript真正的角色是增强用户的浏览体验,使信息的获取和传递更容易。

2. Web应用里的Javascript
在web文档里使用的JavaScript DHTML特性在web应用中都会用到,对于web应用来说,除了内容,呈现和操作API之外,还依赖了WEB浏览器环境提供的更基础的服务。

要真正理解web应用,要认识到web浏览器渐渐变成了一个简易的操作系统。这样就可以把web应用定义为用Javascript访问更多浏览器提供的高级服务(如网络,图像和数据存储)的web页面。高级服务里最有名的是XMLHttpRequest对象,可以对HTTP请求编程来启用网络。Web应用使用这个服务从服务器获取新信息,而不用重新载入页面。类似这样的web应用通常叫做Ajax应用。

JavaScript在web应用里会比在web文档中显得更加重要,Javascript增强了web文档,但是涉及良好的文档需要在禁用javascript后还能继续工作。Web应用本质上就是javascript程序,它使用由web浏览器提供的操作系统类型的服务,并且不用期望他们在禁用浏览器脚本后还能正常工作。应用侧重和用户的交互响应。

从上面两节应该清楚web页面和web应用的区别。

3. 在html里嵌入Javascript
在html里嵌入js有四种方法:
1) 内联,放置在<script></script>标签之间。
2) 放置在<script>标签的src属性指定的外部文件中。
3) 放置在html事件处理程序中,该事件处理程序由onclick或onmouseover这样的html属性指定。
4) 放在一个url里,url使用特殊的”javascript:url”协议。

最后一种方式现在很少使用了,内联脚本使用也越来越少了,最好的方式是放在src属性里(有个编程哲学叫“unobtrusive JavaScript”,主张内容html和行为[JavaScript代码]应当尽量地分离)。

3.1 <script>元素
JavaScript代码可以以内联的形式出现在HTML文件里的<script></script>标签之间:
<script>
// javascript代码
</script>
在XHTML中(XHTML概念,与html的区别请参考:
http://baike.baidu.com/link?url=2R-H0wPp72NiX8DrpmEgT1CmhPR1yl6iS5Cdgd0CJZGZ4-iX0R95ma7oqSCsseD9),<script>标签中的内容被当做其他内容一样对待。如果Javascript代码包含了”<”, ”>”或”&”字符,那么这些字符就会被解释成为XML标记,因此,如果使用XHTML,最好把所有的javascript代码放入一个CDATA部分:
<script>
<![CDATA[
// javascript代码
]]>
</script>

Javascript是web的原始脚本语言,在默认情况下,假定<script>元素包含或引用javascript代码。如果使用非javascript脚本,则要使用type属性指定脚本的MIME类型:
<script type=”text/vbscript”>
// 这里是vb代码
</script>
Type属性的默认值是”text/javascript”。

另外:当web浏览器遇到<script>元素,并且这个元素包含被浏览器识别的type属性时,它会解析这个元素但不会尝试执行或显示它的内容,也不会从指定的url中下载任何东西。这意味着可以使用<script>元素来嵌入任意的文本数据到文档里,只要用type属性指定一个不可执行的类型。获取数据的方法是用表示<script>元素的HTMLElement对象的text属性。注意,这些数据嵌入技术只对内联脚本生效。

3.2 外部文件中的脚本
<script>标签支持src属性,这个属性指定包含Javascript代码的文件的url,用法如下:
<script src=”../../scripts/utils.js”></script>
JavaScript文件的扩展名通常是以.js结尾的,它包含纯粹的javascript代码,其中既没有<script>标签,也没有其他html标签。




3.3 Html中的事件处理程序
当脚本所在的html文件被载入浏览器时,这个脚本里的javascript代码只会执行一次。为了可交互,必须定义事件处理程序:web浏览器先注册js函数,并在之后调用它作为事件的响应。注册事件响应函数可以通过给html元素的属性赋值,比如onclick等实现。

3.4 url中的javascript
在url后面跟一个”javascript:”协议限定符是另一种嵌入javascript代码到客户端的方式。这种特殊的协议类型指定url内容为任意字符串,这个字符串是会被javascript解释器运行的javascript代码。这段代码会被当做单独的一行对待,所以语句之间必须用分号隔开,而且注释要用/* */,不能用//,javascript代码的返回值作为javascript:url识别的资源,如果代码返回undefined,那么这个资源是没有内容的。这种用法可以使用在任何使用url的地方。比如:
<a href=”javascript: new Date().toLocaleTimeString();”>
What time is it?
</a>

部分浏览器会执行url里的代码并使用返回的字符串作为待显示新文档的内容,部分浏览器会执行js代码,但不会回显返回的内容(这时可以通过使用alert弹出显示的字符串)。

前面提到js返回undefined就不会回显任何内容,还可以通过void操作符强制函数调用或给表达式赋予undefined值。如:
<a href=”javascript:void window.open(‘about:blank’);”>
打开一个窗口
</a>


注意:javascript url是web早起的遗物,通常应该避免在现代html里使用。

4. javascript程序的执行
客户端javascript程序没有严格的定义,可以说javascript程序时由web页面中所包含的所有javascript代码(上面提到的4中嵌入javascript方式)。所有这些单独的代码共享同一个全局Window对象。这意味着他们都可以看到相同的Document对象,可以共享相同的全局函数和变量的集合:如果一个脚本定义了新的全局变量或函数,那么这个变量或函数会在脚本执行之后对任意javascript代码可见。上面这句话很重要。

如果web页面包含一个嵌入的窗体(通常使用<iframe>元素),嵌入文档中的javascript代码和被嵌入文档里的javascript代码会有不同的全局对象,它可以当做一个单独的javascript程序。如果外面和里面的文档来自于同一个服务器,那两个文档中的代码就可以进行交互。

Js程序的执行有两个阶段。第一阶段,载入文档内容,并执行<script>元素里的代码(包括内联代码和src指定的外部脚本)。脚本通常按他们在文档里的出现顺序执行,所有脚本的js代码都是从上往下。文档载入完成,并且所有脚本执行完后进入第二阶段。这个阶段是异步的,由事件驱动。事件驱动阶段里第一个事件时load事件,指示文档已经完全载入,并可以操作(注意js的onload与jquery的ready的区别)。通常其他所有javascript代码都是在onload事件处理方法里定义。

注意:核心javascript和客户端javascript都是一个单线程执行模型,脚本和事件处理程序在同一个时间只能执行一个,没有并发性。

1. 如果想要程序响应一个事件,写一个函数,叫做“事件处理程序”、“事件监听器”或“回调”,然后注册这个函数,这样就会在事件发生时调用它,注册的时候函数并没有被调用。注册可以通过几种方式实现,
(1)给html属性赋值。按照约定,事件处理程序的属性的名字是以“on”开始,后面跟着事件的名字。事件处理程序可以通过html属性来完成注册,但不鼓励将js代码和html内容混淆在一起。最简单的方法是把js函数赋值给目标对象的属性,类似:
Window.onload = function(){};
Document.getElementById(“button1”).onclick = function(){};
Function handleResponse(){}
Request.onreadystatechange = handleResponse;
还可以通过html元素属性赋值,后面讲到脚本化时会详细介绍。

(2)如果需要为一个事件注册多个处理程序,大部分可以成为事件目标的对象都有一个叫做addEventListener()的方法,允许注册多个监听器。这个方法后面会介绍。
对于大部分浏览器的大部分事件来说,会把一个对象传递给事件处理程序作为参数,那个对象的属性提供了事件的详细信息,比如点击事件的对象会有一个属性说明鼠标的哪个按钮被单击。

客户端javascript程序还使用异步通知类型,这些类型往往不是事件,比如setTimeout()和setInterval()都是window对象的方法,是全局方法。前者可以设置在指定的毫秒数之后调用某个方法,后者是在指定的毫秒数后重复执行某个方法。可以用递归的方法让setTimeout达到setInterval的效果。

5. 客户端javascript线程模型
Javascript语言核心并不包含任何线程机制,并且客户端javascript传统上也没有定义任何线程机制。单线程意味着浏览器必须在脚本和事件处理程序执行的时候停止响应用户输入,这意味着javascript脚本和事件处理程序不能运行太长时间。Html5定义了一种并发的控制方式,作为后台线程的“webworker”。Web worker是一个用来执行计算密集任务而不冻结用户界面的后台线程,但是web worker线程里的代码不能访问文档内容,不能和主线程或其他worker共享状态。

6. 客户端javascript时间线
前面粗略的把javascript执行分为两个阶段,下面详细的解释javascript程序运行的事件线。





7. 兼容性和互用性
Web浏览器时web应用的操作系统,但是web是一个存在各种差异性的环境。处理不兼容问题最简单的方法是使用类库。

8. 同源策略
同源策略是对javascript代码能够操作哪些web内容的一条完整的安全限制。当web页面使用多个<iframe>元素或打开其他浏览器窗口的时候,这一策略通常会发挥作用。这种情况下,同源策略负责管理窗口或窗体中的javascript代码以及和其他窗口或帧的交互。具体来说,脚本只能读取和所属文档来源相同的窗口和文档的属性
文档的来源包含协议、主机以及载入文档的url端口,从不同web服务器载入的文档具有不同的来源;通过同一主机的不同端口载入的文档具有不同的来源;使用http协议和https协议载入的文档具有不同的来源,即使他们来自同一个服务器。

注意:脚本本身的来源和同源策略不相关,相关的是脚本所嵌入的文档的来源。




另外:在某些情况下同源策略显得太过严格了,所以引入了不严格的同源策略,可以放开一些要求,具体可以查看其它文档。

9. 跨站脚本
跨站脚本(Cross-site scripting),或者叫做XSS,这个术语用来表示一类安全问题,也就是攻击者向目标web站点注入html标签或者脚本。

10. 客户端框架
一些web开发者发现基于客户端框架或类库来创建他们的web应用非常便捷。目前客户端框架很多,比如jQuery,Dojo, Prototype等。但是理解底层api会帮助我们成为更优秀的web开发者。
  • 大小: 89.8 KB
  • 大小: 106.5 KB
  • 大小: 174.8 KB
  • 大小: 65 KB
分享到:
评论

相关推荐

    TCP-IP技术大全

    &lt;br&gt;&lt;br&gt;&lt;br&gt;目 录&lt;br&gt;译者序&lt;br&gt;前言&lt;br&gt;第一部分 TCP/IP基础&lt;br&gt;第1章 开放式通信模型简介 1&lt;br&gt;1.1 开放式网络的发展 1&lt;br&gt;1.1.1 通信处理层次化 2&lt;br&gt;1.1.2 OSI参考模型 3&lt;br&gt;1.1.3 模型的使用 5&lt;br&gt;1.2 TCP/IP...

    C#.NET案例开发集锦代码7-11章

    第七章&lt;br&gt;案例1通过委托实现异步调用&lt;br&gt;案例2使用定时器执行方法&lt;br&gt;案例3...浏览器&lt;br&gt;案例5利用TCP协议实现通讯&lt;br&gt;案例7多线程TCP服务端实现&lt;br&gt;案例6用Socket连接获取客户端地址&lt;br&gt;案例8如何实现UDP通讯协议&lt;br&gt;...

    JavaScript权威指南第五版

    &lt;br&gt;&lt;br&gt;&lt;br&gt;《JavaScript权威指南》全面介绍了JavaScript语言的核心,以及Web浏览器中实现的遗留和标准的DOM。它运用了一些复杂的例子,说明如何处理验证表单数据、使用cookie、创建可移植的DHTML动画等常见任务。...

    javascript高级教程

    当然4,000字&lt;br&gt;节的容量是足够的了.&lt;br&gt;&lt;br&gt;cookie路径和域 这是掌握cookie最后的一个障碍:缺省情况下cookie只能被在同一个Web服务器上同一个路径下设置了该cookie的网页读取.&lt;br&gt;&lt;br&gt;对象和方法的识别 ...

    DotNetTextBox所见即所得编辑器控件 v3.3.1

    &lt;br&gt;&lt;br&gt;2007/6/1&lt;br&gt;Version 3.0.9 beta&lt;br&gt;&lt;br&gt;Updates:&lt;br&gt;1) web.config中新增configfolder、functionfolder、skin三个必须目录的全局路径设置,以往旧版本如果要在不同级别子目录的页面调用控件都要单独设置...

    华蜀网络办公自动化管理系统

    &lt;br&gt;&lt;br&gt;&lt;br&gt;操作系统要求&lt;br&gt;&lt;br&gt;产品优势&lt;br&gt;1、 国内第一个全面采用.NET2.0 和AJAX技术的OA。 &lt;br&gt;2、 国内唯一横向功能菜单和真正的模板结构,界面美观,易用性强,自动上手。 &lt;br&gt;3、 国内唯一无缝切换SQL ...

    ATGrid报表控件/插件V2.1.7.711

    &lt;br&gt;14、在MIS开发中直接支持数据库,让程序开发更方便快捷&lt;br&gt;15、WEB插件和浏览器紧密融合,完全成为浏览器的一个分子!&lt;br&gt;16、一个页面安放多个ATGrid报表插件,再也不会出现其他控件的闪烁变动的效果!&lt;br&gt;17...

    Tea browser 1.0.1个人版 (免费,无时间限制,完全功能)

    &lt;br&gt;TeaBrowser 是一个基于IE内核开发的网页浏览器,专为Web2.0设计。&lt;br&gt;通过对Javascript的扩展,提高了javascritp在桌面开发的能力。&lt;br&gt;可以轻松实现无边框,甚至是圆角的窗体,通过HTML 完全控制窗体样式。&lt;br&gt;...

    ASPAJAXExtSetup

    &lt;br&gt;&lt;br&gt;AJAX的应用使用支持以上技术的web浏览器作为运行平台。这些浏览器目前包括:Mozilla、Firefox、Internet Explorer、Opera、Konqueror及Safari。但是Opera不支持XSL格式对象,也不支持XSLT。&lt;br&gt;

    JavaScript源代码集

     在这儿你只要在传统 <a&gt; 的标签中加入 onMouseOver 的 method 就可达成你要的效果了。这里的 window.status 是用来让你可以在 WWW 浏览器的状态列上显示一些讯息用的。  在语法中,你可以看到讯息部分是用 ’...

    ASP.Net.Web程序设计

    另一个是文件的主体(Body),称为“HTML网页文本区”,是显示在浏览器中的文件内容及其格式,前后使用&lt;body&gt;~&lt;/body&gt;标记框住。 3、用JavaScript语言设计一个程序,判断用户输入的整数是正数、负数还是0。 &lt;html&gt; ...

    HTML5 Canvas 2D API 规范 1.0

    &lt;canvas&gt; 标记由 Apple 在 Safari 1.3 Web 浏览器中引入。对 HTML 的这一根本扩展的原因在于,HTML 在 Safari 中的绘图能力也为 Mac OS X 桌面的 Dashboard 组件所使用,并且 Apple 希望有一种方式在 Dashboard 中...

    周欣的演讲材料

    Google Web Toolkit(Workshop A)&lt;br&gt;&lt;br&gt;主讲人:周欣&lt;br&gt;主讲人周欣是 Google 公司工程师,2006 年在浙江大学获得计算机科学硕士学位,并于同年加入 Google 。在 Google,周欣曾从事提高搜索结果排序准确性方面的...

    Tea browser (专为Web2.0设计)

    &lt;br/&gt;TeaBrowser 是一个基于IE内核开发的网页浏览器,专为Web2.0设计。&lt;br/&gt;通过对Javascript的扩展,提高了javascritp在桌面开发的能力。&lt;br/&gt;可以轻松实现无边框,甚至是圆角的窗体,通过HTML 完全控制窗体样式。...

    YC++编译器网页浏览器

    &lt;br/&gt;&lt;br/&gt;&lt;br/&gt;YC 的组成:&lt;br/&gt;1. HTML解析器&lt;br/&gt;2. XML解析器(目前完成一部分)&lt;br/&gt;3. javascript脚本解释器,C/C++脚本解释器&lt;br/&gt;4. C/C++编译器&lt;br/&gt;5. 文本及二进制编辑器。&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;YC 的特点:&lt;br/&gt;1....

    Web浏览器中的JavaScript

    讲述了浏览器中用到的JavaScript

    jquery 仿制苹果系统导航菜单

    在页面头部标签&lt;head&gt;&lt;/head&gt;中加入下面的代码 &lt;script type="text/javascript" src="js/jquery.js"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="js/interface.js"&gt;&lt;/script&gt; &lt;link href="style.css" rel=...

    易语言 WEB浏览器 2.0 支持库

    本支持库使用的Web浏览器内核来自于 Miniblink , 该作者一直在维持该项目的更新不少年头了, 因为有了他默默无闻的付出, 大家才能这么愉快的使用

    Achilles

    Achilles是一个设计用来测试web应用程序安全性的...&lt;br&gt;它的原理是使网站的javascript验证代码失效,比如使表单的验证代码失效,从而让不正确的表单绕过检查成功提交到服务器,使没有预防的服务器爆出致命错误。&lt;br&gt;

Global site tag (gtag.js) - Google Analytics