web浏览器中的javascript

在html中嵌入javascript

在script标签里面如果有<、&,会被当成xml标记,需要使用如下写法:

<script>
<![CDATA[
// 代码
]]>
</script>

window对象

浏览器定位与导航

载入新的文档
  • location.assign()
  • location.replace()
  • location.reload() 刷新
浏览历史
  • history.back()
  • history.forward()
  • history.go()
浏览器和屏幕信息
navigator:{
   appName:,
   appVersion:,
   userAgent:,
   platform:,
   *onLine:,
   *geolocation:,
   *javaEnabled:,
   *cookieEnable:,
}
// 星号为未标准化
错误处理

window.onerror

打开和关闭窗口
  • window.open()
  • window.open().opener
  • window.close()
窗体之间的关系
  • 外部获取iframe内容,iframe.contentWindow
  • iframe内部获取iframe,window.frameElement
  • window.frames引用自身包含的窗口或窗体的子窗体

脚本化文档

选取文档元素

  • getElementById
  • getElementByName
  • getElementByTagName
  • getElementByClassName
  • querySelectorAll 接受css选择器
  • querySelector 返回第一个匹配的元素

文档结构和遍历

作为节点树的文档
  • parentNode
  • childNodes
  • firstChild,lastChild
  • nextSibling,previoursSibling
  • nodeType
  • nodeValue
  • nodeName
作为元素树的文档
  • firstElementChild,lastElementChild
  • nextElementChild,previoursElementChild
  • childElementCount
获取和设置非标准HTML属性
  • getAttribute()
  • setAttribute()
  • hasAttribute()
  • removeAttribute()

操作来自其他命名空间中属性的xml文档,可以使用如下方法,第一参数为标识命名空间的uri,第二个为属性的本地名字

  • getAttributeNS()
  • setAttributeNS()
  • hasAttributeNS()
  • removeAttributeNS()
作为html的元素内容
  • insertAdjacentHTML() 在指定元素相邻位置插入标记,第一个参数为位置(beforebegin、afterbegin、beforeend,afterend),第二个参数为插入的标记
作为纯文本的元素内容
  • node.textContent 读取或者获取文本内容,ie使用innerText

创建、插入和删除节点

创建节点
  • createElement 创建Element节点
  • createTextNode 创建文本节点
  • cloneNode 复制节点
  • importNode
插入节点
  • Node.appendChild
  • Node.insertBefore
删除和替换节点
  • removeChild
  • replaceChild

文档和元素的几何形状和滚动

????????

html表单

表单和元素的属性
  • type
  • form
  • name
  • value

方法:

  • reset()
  • submit()
表单和元素的事件处理程序

不会被reset()和submit()触发,仅被按钮触发

  • onsubmit
  • onreset

可以通过在事件中返回false来阻止默认事件执行

其他文档属性

  • cookie
  • domain
  • lastModified
  • location
  • referrer
  • title
  • URL
  • document.writr()方法
查询选取的文本

window.getSelection()

可编辑内容
  • 元素属性contenteditable
  • Document的designMode属性为on,整个文档可以编辑

执行元素编辑命令,execCommand()

脚本化CSS

CSS概览

层叠

CSS中的C代表层叠,有低到高顺序为:

  • web浏览器的默认样式
  • 文档的样式表
  • 每个html元素的style属性

事件处理

异步事件驱动编程模型

18.脚本化HTTP

Ajax:Asynchronous JavaScript and XML

实现Ajax和Comet方式:

  • img标签的src
  • iframe的src(跨域)
  • scritp(即JSONP,不跨域)
  • XMLHttpRequest对象

使用XMLHttpRequest

var request= new XMLHttpRequest();

http请求组成:

  • http请求方法或动作
  • 正在请求的url
  • 一个可选的请求头集合
  • 一个可选的请求主体

服务器返回的http响应组成:

  • 一个由数字和文字组成的状态码,标识请求成功或者失败
  • 一个响应头集合
  • 响应主体
指定请求
  • 调用open方法

第一个参数指定HTTP方法或者动作,第二个参数指定请求的URL

var request= new XMLHttpRequest();
var request.open('GET','data.csv');
  • 添加头部
var request.setRequestHeader('Conten-Type','text/plain') //设置头部

以下头部不能自己设置:
QQ浏览器截图20181109130830

  • 发送请求
request.send(null);
// send参数为请求主体
取得响应
  • status和statusText以数字和文本形式返回HTTP状态码
  • getResponseHeader()和getAllResponseHeaders()查询响应头
  • responseText中获取文本形式的响应主体,responseXML中获取Document形式的响应主体
  • readyState属性标识响应状态:

QQ浏览器截图20181109132343

  • readystatechange绑定事件处理程序,readyState改变均会触发此事件,也可以使用addEventListener

QQ浏览器截图20181109132556

同步响应

open的第三个参数传false,将使用同步响应,此时不需要事件处理程序

响应编码

request.overrideMimeType("text/plain;charset=utf-8")

HTTP进度事件
  • 调用send时触发loadstart()
  • 加载服务器响应时,触发progress
  • 超时触发timeout()
  • 中止触发abort()
  • 错误触发error()

progress常用属性:

  • loaded:目前传输的字节数
  • total:整体字节长度
中止请求和超时
  • abort()
跨域HTTP请求
  • CORS:跨域资源共享

借助<script>发送HTTP请求:JSONP

// 指定回调函数名称
url?jsonp=xxx
url?callback=xxx

客户端存储

形式:

  • web存储:localStrorage、sessionStrorage
  • cookie:针对服务端脚本设计,每一次HTTP请求都会传输到服务端
  • 离线Web应用
  • web数据库
  • 文件系统API

localStrorage和sessionStrorage

区别:

  • localStrorage永久性,作用域限定在文档源级别
  • sessionStrorage有效期仅在在本次会话中,作用域限定在文档源级别,且仅限在本标签页
设置
  • localStrorage.key=value
  • localStrorage.setItem(key,value)
获取
  • localStrorage.key
  • localStrorage.getItem(key)
删除
  • delete localStrorage.key (IE8不支持)
  • localStrorage.removeItem(key)
  • localStrorage.clear()
监听改变

使用addEventListener

事件对象:

  • key clear()时为null
  • newValue removeItem()时为null
  • oldValue 新增时为null
  • storageArea localStorage或sessionStrorage对象
  • url 触发所在文档的url

cookie

  • navigator.cookieEnabled检测cookie是否可用(启用)
  • 有效期为本次会话期间,默认有效期为直到浏览器关闭,如果要延长可以设置max-age,单位秒
  • 作用域默认对本页面、本页面同目录和子目录可见,不过可以设置其domain和path
设置cookie

document.cookie="key=encodeURIComponent(value);max-age=seconds"

获取cookie

document.cookie,可以使用decodeURIComponent解析

限制
  • 浏览器最大300
  • 每个web服务器20
  • 保存数据最大4k

应用程序存储和离线web应用???

21.多媒体和图形编程

脚本化图片

new Image()
// 可以使用此方式提前强制缓存图片

脚本化音频和视频

new Audio('src/demo.wav')   // 音频构造函数,和选取标签得到的对象一样
类型选择和加载

使用canPlayType(MIME类型)测试一个媒体元素是否能播放指定类型的媒体文件

let a=new Audio();
a.canPlayType("audio/wav")

使用lode()方法加载source标签指定的媒体源

控制媒体播放
  • play()
  • pause()
  • 设置currentTime定点播放
  • volumn表示音量,介于0~1
  • muted静音模式
  • playbackRate:播放速度,默认1.0,负值表示回放
  • controls播放控件
  • loop循环播放
  • preload预加载,none不预加载,metadata预加载元数据,auto
  • autoplay
查询媒体状态
  • paused
  • seeking 进度跳转中
  • ended 播放完,loop为true时永不为true
  • duration媒体时长,载入前为NAN
  • initialTime开始时间
  • played已播放的时间段
  • buffered已缓冲的时间段
  • seekable需要跳到的时间段

QQ截图20181116130207

  • readyState

QQ截图20181116130446

  • networkState

QQ截图20181116130511

  • error

QQ截图20181116130537

媒体相关事件

QQ截图20181116130653
QQ截图20181116130731

SVG:可伸缩的矢量图形

canvas中的图形

大部分的画布绘制API都不是在canvas元素上定义,而是定义在一个绘制上下文对象上。

getContext() 用来获取上下文对象,传入'2d'参数会获得CanvasRenderingContext2D对象,传入'webgl'可以获得3D图形的上下文。

<canvas id="demo"></canvas>
<script>
    let canvas = document.getElementById('demo');
    let context = canvas.getContext('2d')
    context.fillStyle="#0000ff"
    context.fillRect(0,0,50,20)
    context.fill()
</script>
绘制线段和填充多边形
c.beginPath() //开始一条新路径
c.moveTo(100,100) //从(100,100)开始定义一条新的子路径
c.lineTo(200,200) //从(100,100)到(200,200)绘制一条线段
c.fill() // 填充区域
c.stroke() // 勾勒线段
c.closePath()  // 关闭路径,即将终点和起点连接起来
非零绕数原则

QQ浏览器截图20181117190737

图形属性

QQ浏览器截图20181117191058
QQ浏览器截图20181117191109

  • save()将当前图形状态压入用于保存状态的栈上
  • restore() 从栈中弹出并恢复最近一次保存的状态
画布的尺寸和坐标
  • 尺寸:canvas元素的width和height属性和画布对象的宽度高度决定画布的尺寸
  • 坐标:画布左上角为原点
坐标系转换

当前变换矩阵:定义画布的当前坐标系

绘制和填充曲线

QQ浏览器截图20181117195232

矩形
  • fillRect()
  • stokeRect()
  • clearRect()
  • rect()
颜色、透明度、渐变以及图案
  • strokeStyle、fillStyle
  • globalAlpha
  • 利用createPattern()方法填充图案
var image = document.getElementById('myimage')
c.fillStyle=c.createPattern(image,'repeat')
// 第一个参数指定填充的图案,可以是img元素(包括通过Image构造函数创建)、canvas元素、video元素;第二个参数定义平铺方式
  • 利用CanvasGradient对象创建渐变

QQ浏览器截图20181117201131

线段绘制相关的属性
  • lineWidth:默认为1,任意正数,小于1的小数时绘制半透明
  • lineCap:封顶
  • lineJoin

QQ浏览器截图20181117201749

文本

fillText()/strokeText():

  • 第一个参数为文本内容
  • 第二个和第三个参数分别为绘制X、Y坐标
  • textAlign/textBaseline

QQ浏览器截图20181117201749

  • 第四个参数指定显示宽度,如果文本溢出则会缩放画布或者采用更窄更小的字体
  • 在绘制前可以通过measureText()度量文本宽度
裁剪

clip()

阴影
  • shadowColor:颜色
  • shadowOffsetX、shadowOffsetY偏移量
  • shadowBlur模糊度
图片

drawImage():

  • 第一个参数为图片源,可以是img元素(包括通过Image构造函数创建)、canvas元素、video元素
  • 第二个和第三个参数分别为绘制X、Y坐标
  • 如果传递5个参数,剩余两个指定宽高
  • 如果传递9个参数,2~5参数指定源矩形区域,6~9指定目标矩形区域

toDataURL(),画布元素自身的方法,提取成一张图片,同源限制

  • 第一个参数指定MIME类型,默认png
合成

QQ浏览器截图20181117204539
QQ浏览器截图20181117204604

像素操作

QQ浏览器截图20181117204940

命中检测
  • isPointInPath() 指定点是否在路径上
  • getImageData() 检测指定点是否已绘制

HTML5 API

地理位置

navigator.geolocation

navigator.geolocation.getCurrentPosition() // 获取当前位置,异步
navigator.geolocation.wathcPosition() // 获取并监听当前位置,改变触发回调,异步
navigator.geolocation.clearWatch() //停止监听 

历史记录管理

  • location.hash、hashchange
  • history.pushState()、popstate、history.replaceState()

跨域消息传递

postMessage(data数据,url目标窗口源),触发目标窗口window.onmessage,事件对象属性:

  • data:内容
  • source:消息来源window
  • origin:消息来源url

Web Worker

Worker对象
let worke= new Worker('./worker.js') // 创建worker实例
// 如果地址是绝对地址,那么受同源策略限制
worke.postMessage(data) // 将数据传递(结构性复制)给worker

// 在worker对象中接受消息
worke.onmessage=function(e){
    let data=e.data
}
// 捕捉错误
worke.onerror=function(e){
    console.log(e.filename)
    console.log(e.lineno)
}
// 也可以使用addEventListener和removeEventListener代替以上方法

worke.terminate() // 使用完关闭进程
worker作用域

创建的worker在一个全新的运行环境中,即WorkerGlobalScope全局对象,该对象有如下属性和方法:

  • onmessage=fn(e) 接受外部传来的数据
  • postMessage(data) 发送消息出去
  • close() 关闭当前worker
  • importScript(url1,url2...) 加载库代码 同步
  • self 自身引用
  • 计时器相关
  • location
  • navigator
  • 常用的事件目标方法,addEventLisitener、removeEventListener
  • onerror

类型化数组和ArrayBuffer

类数组对象,和常规数组区别:

  • 类型化数组元素均为数字,在创建时就决定了数组中数字的类型和大小(单位:位)
  • 类型化数组有固定长度
  • 在创建类型化数组时,数组中元素总是默认为0

一共有8种:
微信截图_20181119223833
方法:

  • set() 将一个常规或者类型化数组复制到另外一个类型化数组中
let bytes=new Uint8Array(1024)
let pattern=new Uint8Array([0,1,2,3])
bytes.set(pattern)
bytes.set(pattern,4) // 4为偏移量
bytes.set([0,1,2,3],8)
  • subarray(start,end) 返回部分内容

DataView定义了8个set和get方法

Blob

是对大数据块的不透明引用或者句柄。表示二进制大对象

let blob= new BlobBuilder()
blob.append("data")
blob.size //字节大小
blob.type // MIME类型
blob.slice(0,1024,'text/plain')
读取blob

利用FileReader对象

文件系统API

let fs = requestFileSystemSync(PERSISTENT,1024*1024)
requestFileSystemSync(TEMPORARY,// 有效期
    50*1024*1024,// 大小:50MB
    function(fs){//fs为该文件系统对象 
    
    },function(err){

    
})

客户端数据库

  • webSQL 弃用
  • indexedDB 对象数据库
let indexedDB=window.indexedDB
let request=indexedDB.open('dbName')
request.onerror=function(err){}
request.onsuccess=function(){
    let db=request.result
}

web套接字

let socket=new WebSocket(url) // ws://或者wss://协议
socket.onopen=function(e){}
socket.onclose=function(e){}
socket.onerror=function(e){}
socket.onmessage=function(e){}
socket.send('hello')
socket.close()

BWrong
363 声望304 粉丝

愿你走出半生,归来仍是少年