Page Visibility API
- document.hidden: 表示页面是否隐藏的布尔值
- document.VisibilityState: 表示下列4个可能状态的值
- 页面在后台标签页中或浏览器最小化
- 页面在前台标签页中
- 实际的页面已经隐藏,但用户可以看到页面的预览
- 页面在屏幕外执行预渲染处理
- visibilitychange事件: 当文档从可见变为不可见或从不可见变为可见时,触发该事件
Geolocation API
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| navigator.geolocation.getCurrentPosition(function(position){ console.log(position.coords.latitude + ',' + position.coords.longitude); }, function(error){ console.log(error.code + ',' + error.message); },{ enableHighAccuracy: true, timeout: 5000, maximumAge: 25000 })
var watchId = navigator.geolocation.watchPosition(function(position){ }, function(error){ })
clearWatch(watchId);
|
File API
1 2 3 4 5 6 7 8 9
| var filesList = document.getElementById("myFile"); EventUtil.addHander(fileList, 'change', function(event){ var files = EventUtil.getTarget(event).files, i = 0, len = files.length; while(i < len){ console.log(files[i].name + '(' + files[i].type + ',' files[i].size + 'bytes)'); } })
|
FileReader类型
- readAsText(file, encoding): 以纯文本形式读取文件,将读取到的文件保存在result属性中,第二个参数是指定编码类型,可选。
- readAsDataURL(file): 读取文件并将文件以数据URI的形式存放在result属性中;
- readAsBinaryString(file): 读取文件并将一个字符串保存在result属性中,字符传中的每个字符表示一个字节。
- readAsArrayBuffer(file): 读取文件并将一个包含文件内容的ArrayBuffer保存在result属性中。
由于读取过程是异步的,FileReader也提供了几个事件,最有用的三个:progress、error和load。error只有一个属性code,1表示未找到文件,2表示安全性错误,3表示读取中断,4表示文件不可读,5表示编码错误。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| var fileList = document.getElementById('myFile'); EventUitl.addHander(fileList, 'cchange', function(event){ var info = '', output = document.getElementById('output'), progress = document.getElementById('progress'), files = EventUtil.getTarget(event).files, type = 'default', reader = new FileReader(); if(/image/.test(files[0].type)){ reader.readAsDataURL(files[0]); type = 'image'; }else{ reader.readAsText(files[0]); type = 'text'; } reader.onerror = function(error){ output.innerHTML = 'Could not read file, error code is ' + reader.error.code; } reader.onprogress = function(event){ if(event.lengthComputable){ progress.innerHTML = event.loaded + '/' + event.total; } } reader.onload = function(){ var html = ''; switch(type){ case 'image': html = '<img src=\""+ reader.result + "\" >"; break; case 'text': html = reader.result; break; } output.innerHTML = html; } })
|
读取部分内容
blob是File类型的服类型。
1 2 3 4 5 6 7 8 9 10 11
| function blobSlice(blob, startByte, length){ if(blob.slice){ return blob.slice(startByte, length); }else if(blob.webkitSlice){ return blob.webkitSlice(startByte, length); }else if(blob.mozSlice){ return blob.mozSlice(startByte, length); }else{ return null; } }
|
对象URL
1 2 3 4 5 6 7 8 9
| function createObjectURL(blob){ if(window.URL){ return window.URL.createObjectURL(blob); }else if(window.webkitURL){ return window.webkitURL.createObjectURL(blob); }else{ return null; } }
|
函数返回的是一个字符串,指向一块内存地址。
如果不需要相应的数据,最好释放它占用的内存,可以把对象URL传给window.URL.revokeObjectURL()
读取拖放的文件
使用XHR上传文件
Web计时
window.performance对象
window.performance.navigation包含属性:
- redirectCount: 页面加载的重定向次数
- type: 数值常量,表示刚刚发生的导航类型
- performance.navigation.TYPE_NAVIGATE(0): 页面第一次加载
- performance.navigation.TYPE_RELOAD(1): 页面重载过
- performance.navigation.TYPE_BACK_FORWARD(2): 页面通过后退或前进按钮打开
performance.timing属性也是一个对象,每个对象属性都是时间戳。
- navigationStart: 开始导航到当前页面的时间。
- unloadEventStart: 前一个页面的unload事件开始的时间。只有在前一个页面与当前页面来自同一个域时,这个属性值才有值,否则值为0
- ….
Web Workers
使用worker
1 2
| var worker = new Worker('xxx.js'); worker.postMessage('start!');
|
Worker通过message和error事件与页面通信。
1 2 3 4
| worker.onmessage = function(event){ var data = event.data; }
|
Worker不能完成给定的任务时会触发error事件。
1 2 3
| worker.onerror = function(event){ console.log('Error: ' + event.fielname + ' (' + event.lineno + "):" + event.message); }
|
终止Worker动作, terminate()方法
Worker的全局作用域
Web Worker所执行的Javascript代码完全在另一个作用域中,与当前网页中的代码不共享作用域。