`
足至迹留
  • 浏览: 495664 次
  • 性别: 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
分享到:
评论

相关推荐

    Web浏览器中的JavaScript

    ### Web浏览器中的JavaScript知识点详解 #### 一、HTML与JavaScript的结合 JavaScript 是一种广泛应用于网页开发中的脚本语言,其主要功能在于增强网站的交互性和动态性。在早期的网页设计中,HTML 作为静态内容...

    JavaScript学习笔记.pdf

    1、&lt;body&gt; 中的 JavaScript: 可以在 HTML 页面的 &lt;body&gt; 部分中插入 JavaScript 代码,例如:&lt;body&gt;&lt;p&gt;JavaScript 写入 HTML 输出流中:&lt;/p&gt;&lt;script&gt;document.write("&lt;h1&gt;这是一个标题&lt;/h1&gt;");document.write("&lt;p&gt;...

    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...

    WEB开发 之JavaScript 使用.docx

    在这个例子中,浏览器会解析并执行`&lt;script&gt;`标签内的JavaScript代码,弹出一个包含文字“My First JavaScript”的警告框。 在HTML文档中,JavaScript可以放置在`&lt;body&gt;`或`&lt;head&gt;`部分。如果JavaScript位于`&lt;body&gt;...

    JavaScript 是一种广泛使用的脚本语言,主要用于网页开发,但也可以用于服务器端开发(如 Node.js)和其他非浏览器环

    javascript:JavaScript 是一种广泛使用的脚本...1&lt;!DOCTYPE html&gt;2&lt;html lang="zh"&gt;3&lt;head&gt;4 &lt;meta charset="UTF-8"&gt;5 &lt;title&gt;我的第一个 JavaScript 程序&lt;/title&gt;6&lt;/head&gt;7&lt;body&gt;89&lt;script&gt;10 document.write("Hello,

    JavaScript在HTML中的应用探讨.pdf

    1. 跨平台性:JavaScript 依赖于 Web 浏览器本身,与操作环境无关。 2. 安全性:JavaScript 是一种安全的脚本语言,避免了许多安全隐患。 3. 灵活性:JavaScript 可以与 HTML 结合,实现动态网页的设计。 ...

    简单web浏览器模板

    在Web浏览器模板中,HTML文件通常会包含一个基本的网页结构,如`&lt;html&gt;`、`&lt;head&gt;`和`&lt;body&gt;`标签。`&lt;head&gt;`部分可能包含了`&lt;title&gt;`标签来定义页面标题,以及可能的`&lt;meta&gt;`标签来设置字符集或其他元信息。`&lt;body&gt;`...

    HTML 语言和JavaScript语言.ppt

    例如,`&lt;p align="center"&gt;`中`align`是属性,`center`是属性值,它告诉浏览器段落内容应居中对齐。 在HTML中,常见的标记包括: 1. `&lt;title&gt;`:定义网页的标题,显示在浏览器的标题栏。 2. `&lt;p&gt;`:定义段落。 3. ...

    基于ztebw浏览器的web页面开发指南

    这有助于确保Web页面能在ZTEBW浏览器中正确渲染,并与其它符合标准的浏览器保持一致的表现。 ##### ZTEBW对于图片的支持 ZTEBW浏览器支持常见的图片格式,如JPEG、GIF和PNG。开发者可以根据需求选择合适的格式以...

    JavaScript权威指南第五版

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

    《Web前端设计基础——HTML5、CSS3、JavaScript》课后答案整理.pdf

    - HTML5文档基本结构包括&lt;html&gt;、&lt;head&gt;和&lt;body&gt;等标签,其中&lt;title&gt;标签定义了文档的标题,是&lt;head&gt;中必须的元素。 - 元素是HTML文档的基本单元,通过标签定义,使用属性来设置特定的特性。 - 元素和标签分为...

    javascript 授课 学习 课件

    在DOM中,`&lt;html&gt;`是文档节点,`&lt;head&gt;`和`&lt;body&gt;`是元素节点,而`&lt;title&gt;`、`&lt;h1&gt;`和`&lt;p&gt;`也都是元素节点,它们各自有相应的文本节点。`&lt;title&gt;`的子节点是文本节点"DOM Tutorial",`&lt;p&gt;`的子节点是文本节点"Hello ...

    Web前端基础笔记1

    文件头中可以设置网页标题(&lt;title&gt;&lt;/title&gt;)、字符编码、页面刷新、JavaScript代码(&lt;script&gt;&lt;/script&gt;)、CSS代码(&lt;style&gt;&lt;/style&gt;)以及引入外部样式(&lt;link&gt;)。 2. HTML元素 2.1 标题、段落与换行 - `&lt;h1&gt;`...

    javascript写在head标签中产生的报错.pdf

    1. **延迟脚本执行**:可以使用`&lt;script&gt;`标签的`defer`属性,这会让浏览器等待HTML解析完成后再执行JavaScript,但不会阻止页面渲染。 ```html &lt;script defer src="your-script.js"&gt;&lt;/script&gt; ``` 2. **异步加载*...

    第3章HTML相关技术基础知识.pdf

    &lt;th&gt;标题1&lt;/th&gt; &lt;th&gt;标题2&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;内容1&lt;/td&gt; &lt;td&gt;内容2&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; ``` 2. `&lt;div&gt;`和`&lt;span&gt;`:`&lt;div&gt;`用于分组HTML元素,常用于布局和样式控制;`&lt;span&gt;`则用于对文本进行局部...

    Web数据库技术:第二章 HTML信息组织.ppt

    &lt;head&gt;包含元数据,如网页标题&lt;title&gt;,而&lt;body&gt;则包含实际显示在浏览器中的内容。在&lt;body&gt;标签内,可以使用各种HTML元素来组织文本、图像、链接、表格、表单、框架等。 创建超链接是HTML的一大特色,使用&lt;a&gt;标签...

    Web开发之HTML篇.zip

    1. **文档声明**:&lt;!DOCTYPE html&gt;,告诉浏览器文档使用的HTML版本。 2. **HTML根元素**:&lt;html&gt;:整个HTML文档的容器。 3. **头部元素**:&lt;head&gt;:包含元信息,如字符编码(&lt;meta charset="UTF-8"&gt;)、页面标题(...

    html web浏览器

    1. **新元素的引入**:为了更好地结构化网页内容,HTML5引入了如&lt;header&gt;、&lt;nav&gt;、&lt;article&gt;、&lt;section&gt;、&lt;aside&gt;等新元素,使得网页结构更加清晰,有利于搜索引擎优化(SEO)和无障碍访问。 2. **多媒体支持**:...

    高性能JavaScript编程(第一章)

    &lt;script type="text/javascript" src="file1.js"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="file2.js"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="file3.js"&gt;&lt;/script&gt; &lt;/body&gt; &lt;/html&gt; ``` #####...

Global site tag (gtag.js) - Google Analytics