文档通信(跨域-不跨域)、时时通信(websocket)、离线存储(applicationCache)、开启多线程(web worker)
一、文档间的通信 postMessage对象
//不跨域
1、iframe:obj.contentWindow [iframe中的window对象] iframe拿到父级页面的window: parent(上一层window) top(最顶层window)
2、window.open() 返回值是新窗口的window对象 拿到父级window : window.opener
//跨域
3. 目标域的window.postMessage("xxx","目标域"); 目标域:监听message事件,在ev.data中拿到发送过来的消息
4.ajax需要服务端配合:允许我跨域访问
5.jsonp
//无刷新上传文件
obj.fiels //获取文件列表
var FD = new FormData();
FD.append('name',files[0]) //构建二进制对象
//ajax发送二进制数据给后台
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if( xhr.status == 200 ){
var res = JSON.parse(xhr.response);
alert(res.msg);
}
}
}
//ajax发送源文件
xhr.open('post','post_file.php',true);
xhr.setRequestHeader('X-Request-with','XMLHttpRequest');
xhr.send(FD);
xhr.upload //上传进度对象
事件:
onprogress: 上传事件(上传过程中连续触发)
属性:
ev.total(要发送的总量)
ev.loaded(已发送的总量)
二、websocket:通信协议 -> 与 http类似 (参考阮一峰2012‘互联网协议入门篇’)
1.nodejs搭建前后端
2.使用websocket实现时时传输:
a].安装socket.io:npm install socket.io 引入sokit.io包
//服务端
a].var io = require('socket.io');
var soket = io.listen(httpServer);
b].soket.sokets.on('connection',function(socket){
//socket -> 每个人进来都会产生一个socket
}); //有人进来的事件监听,执行回掉
e]. 服务端->客户端:socket.emit('hello','数据');
h]. 监听客户端'hellohello'事件:socket.on('hellohello',function(data){
//data 客户端过来的数据(数据1)
});
i]. socket.broadcast.emit('a','有新人进来了'); //广播(除了当前的人(刚刚进来的人)接收不到)
//客户端
c].客户端需要发送tcp链接,引入client.socket.js文件 [提供一个io对象。
d]. var socket = null;socket = io.connect('url');发送tcp请求
f]. 客户端监听hello事件: socket.on('hello',function(data){
//data 服务端过来的数据
});
g]. 客户端 -> 服务端:socket.emit('hellohello','数据1');
三、applicationCache 离线存储
1、搭建离线应用程序
//服务器设置头信息
AddType text/cache-manifest .manifest //http.comfig中加 nodeJs: 'AddType': 'text/cache-manifest .manifest'
//html标签添加属性:
manifest='cache.manifest' //xxx就是离线存储的清单列表
//新建cache.manifest文件
先写:
-CACHE MANIFEST
-2.png //就会缓存2.png图片
-FALLBACK
-styl1.css style2.css //第一个网络地址没有获取到,就走第二个缓存
-NETWORK:无论缓存是否有,都从网络获取
四、web worker [开启多线程
1.使用:
//主js中:
var w1 = new Worker('worker1.js'); //开启多线程
w1.postMessage('wenwen'); //用于传递数据
//worker1.js中:
self.onmessage = function(ev){ //self == w1 引用此文件的返回值
ev.data
}
<!--
console.time(1);
.
.
console.timeEnd(1);
//计算执行中间的代码使用的时间,在控制台打印出来
-->
2.运行环境:
navigator:appName appVersion userAgent platform
location:所有属性只读
self: 只想全局worker对象
所有的ECMA对象:Objec...
XMLHttpRequest
setTimeout setIntercal
self.close()方法:内部立即停止worker运行 worker.terminate()//外部结束进程
importScripts('xxx.js')方法引入其他js文件
五、小功能:
1、标签可编辑属性:contenteditable='true'