表单,FormData 对象表单概述表单(<form>)用来收集用户提交的数据,发送到服务器。比如,用户提交用户名和密码,让服务器验证,就要通过表单。表单提供多种控件,让开发者使用,具体的控件种类和用法请参考 HTML 语言的教程。本章主要介绍 JavaScript 与表单的交互。
12345678910111213<form action="/handling-page" method="post"> <div> <label for="name">用户名:</label> <input type="text" id="name" name="user_name" /> </div> <div> <label for="passwd">密码:</label> <input type=" ...
File 对象,FileList 对象,FileReader 对象File 对象File 对象代表一个文件,用来读写文件信息。它继承了 Blob 对象,或者说是一种特殊的 Blob 对象,所有可以使用 Blob 对象的场合都可以使用它。
最常见的使用场合是表单的文件上传控件(<input type="file">),用户选中文件以后,浏览器就会生成一个数组,里面是每一个用户选中的文件,它们都是 File 实例对象。
1234// HTML 代码如下// <input id="fileItem" type="file">var file = document.getElementById('fileItem').files[0];file instanceof File // true
上面代码中,file是用户选中的第一个文件,它是 File 的实例。
构造函数浏览器原生提供一个File()构造函数,用来生成 File 实例对象。
1new File(array, name [, ...
ArrayBuffer 对象,Blob 对象ArrayBuffer 对象ArrayBuffer 对象表示一段二进制数据,用来模拟内存里面的数据。通过这个对象,JavaScript 可以读写二进制数据。这个对象可以看作内存数据的表达。
这个对象是 ES6 才写入标准的,普通的网页编程用不到它,为了教程体系的完整,下面只提供一个简略的介绍,详细介绍请看《ES6 标准入门》里面的章节。
浏览器原生提供ArrayBuffer()构造函数,用来生成实例。它接受一个整数作为参数,表示这段二进制数据占用多少个字节。
1var buffer = new ArrayBuffer(8);
上面代码中,实例对象buffer占用8个字节。
ArrayBuffer 对象有实例属性byteLength,表示当前实例占用的内存长度(单位字节)。
12var buffer = new ArrayBuffer(8);buffer.byteLength // 8
ArrayBuffer 对象有实例方法slice(),用来复制一部分内存。它接受两个整数参数,分别表示复制的开始位置(从0开始)和结束位置(复制时不包括结束 ...
Location 对象,URL 对象,URLSearchParams 对象URL 是互联网的基础设施之一。浏览器提供了一些原生对象,用来管理 URL。
Location 对象Location对象是浏览器提供的原生对象,提供 URL 相关的信息和操作方法。通过window.location和document.location属性,可以拿到这个对象。
属性Location对象提供以下属性。
Location.href:整个 URL。
Location.protocol:当前 URL 的协议,包括冒号(:)。
Location.host:主机。如果端口不是协议默认的80和433,则还会包括冒号(:)和端口。
Location.hostname:主机名,不包括端口。
Location.port:端口号。
Location.pathname:URL 的路径部分,从根路径/开始。
Location.search:查询字符串部分,从问号?开始。
Location.hash:片段字符串部分,从#开始。
Location.username:域名前面的用户名。
Location.password:域名前 ...
History 对象概述window.history属性指向 History 对象,它表示当前窗口的浏览历史。
History 对象保存了当前窗口访问过的所有页面网址。下面代码表示当前窗口一共访问过3个网址。
1window.history.length // 3
由于安全原因,浏览器不允许脚本读取这些地址,但是允许在地址之间导航。
12345// 后退到前一个网址history.back()// 等同于history.go(-1)
浏览器工具栏的“前进”和“后退”按钮,其实就是对 History 对象进行操作。
属性History 对象主要有两个属性。
History.length:当前窗口访问过的网址数量(包括当前网页)
History.state:History 堆栈最上层的状态值(详见下文)
123456// 当前窗口访问过多少个网页window.history.length // 1// History 对象的当前状态// 通常是 undefined,即未设置window.history.state // undefined
方法History.back()、His ...
Storage 接口概述Storage 接口用于脚本在浏览器保存数据。两个对象部署了这个接口:window.sessionStorage和window.localStorage。
sessionStorage保存的数据用于浏览器的一次会话(session),当会话结束(通常是窗口关闭),数据被清空;localStorage保存的数据长期存在,下一次访问该网站的时候,网页可以直接读取以前保存的数据。除了保存期限的长短不同,这两个对象的其他方面都一致。
保存的数据都以“键值对”的形式存在。也就是说,每一项数据都有一个键名和对应的值。所有的数据都是以文本格式保存。
这个接口很像 Cookie 的强化版,能够使用大得多的存储空间。目前,每个域名的存储上限视浏览器而定,Chrome 是 2.5MB,Firefox 和 Opera 是 5MB,IE 是 10MB。其中,Firefox 的存储空间由一级域名决定,而其他浏览器没有这个限制。也就是说,Firefox 中,a.example.com和b.example.com共享 5MB 的存储空间。另外,与 Cookie 一样,它们也受同域限制。某个网 ...
CORS 通信CORS 是一个 W3C 标准,全称是“跨域资源共享”(Cross-origin resource sharing)。它允许浏览器向跨域的服务器,发出XMLHttpRequest请求,从而克服了 AJAX 只能同源使用的限制。
简介CORS 需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能。
整个 CORS 通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS 通信与普通的 AJAX 通信没有差别,代码完全一样。浏览器一旦发现 AJAX 请求跨域,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感知。因此,实现 CORS 通信的关键是服务器。只要服务器实现了 CORS 接口,就可以跨域通信。
两种请求CORS 请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。
只要同时满足以下两大条件,就属于简单请求。
(1)请求方法是以下三种方法之一。
HEAD
GET
POST
(2)HTTP 的头信息不超出以下几种字段。
Accept
Accept-Langu ...
同源限制浏览器安全的基石是“同源政策”(same-origin policy)。很多开发者都知道这一点,但了解得不全面。
概述含义1995年,同源政策由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个政策。
最初,它的含义是指,A 网页设置的 Cookie,B 网页不能打开,除非这两个网页“同源”。所谓“同源”指的是“三个相同”。
协议相同
域名相同
端口相同(这点可以忽略,详见下文)
举例来说,[http://www.example.com/dir/page.html](http://www.example.com/dir/page.html)这个网址,协议是http://,域名是www.example.com,端口是80(默认端口可以省略),它的同源情况如下。
http://www.example.com/dir2/other.html:同源
http://example.com/dir/other.html:不同源(域名不同)
http://v2.www.example.com/dir/other.html:不同源(域名不同)
http://www.exa ...
XMLHttpRequest 对象简介浏览器与服务器之间,采用 HTTP 协议通信。用户在浏览器地址栏键入一个网址,或者通过网页表单向服务器提交内容,这时浏览器就会向服务器发出 HTTP 请求。
1999年,微软公司发布 IE 浏览器5.0版,第一次引入新功能:允许 JavaScript 脚本向服务器发起 HTTP 请求。这个功能当时并没有引起注意,直到2004年 Gmail 发布和2005年 Google Map 发布,才引起广泛重视。2005年2月,AJAX 这个词第一次正式提出,它是 Asynchronous JavaScript and XML 的缩写,指的是通过 JavaScript 的异步通信,从服务器获取 XML 文档从中提取数据,再更新当前网页的对应部分,而不用刷新整个网页。后来,AJAX 这个词就成为 JavaScript 脚本发起 HTTP 通信的代名词,也就是说,只要用脚本发起通信,就可以叫做 AJAX 通信。W3C 也在2006年发布了它的国际标准。
具体来说,AJAX 包括以下几个步骤。
创建 XMLHttpRequest 实例
发出 HTTP 请求
接收服 ...
Cookie概述Cookie 是服务器保存在浏览器的一小段文本信息,一般大小不能超过4KB。浏览器每次向服务器发出请求,就会自动附上这段信息。
HTTP 协议不带有状态,有些请求需要区分状态,就通过 Cookie 附带字符串,让服务器返回不一样的回应。举例来说,用户登录以后,服务器往往会在网站上留下一个 Cookie,记录用户编号(比如id=1234),以后每次浏览器向服务器请求数据,就会带上这个字符串,服务器从而知道是谁在请求,应该回应什么内容。
Cookie 的目的就是区分用户,以及放置状态信息,它的使用场景主要如下。
对话(session)管理:保存登录状态、购物车等需要记录的信息。
个性化信息:保存用户的偏好,比如网页的字体大小、背景色等等。
追踪用户:记录和分析用户行为。
Cookie 不是一种理想的客户端存储机制。它的容量很小(4KB),缺乏数据操作接口,而且会影响性能。客户端存储建议使用 Web storage API 和 IndexedDB。只有那些每次请求都需要让服务器知道的信息,才应该放在 Cookie 里面。
每个 Cookie 都有以下几方面的元数据。
C ...
