一、文档间的通信 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 } 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'