• 文档通信(跨域-不跨域)、时时通信(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'
    
  • 相关阅读:
    600E
    题解报告:hdu 1124 Factorial(求N!尾数有多少个0。)
    求N!尾数有多少个0。
    poj 2185 Milking Grid(二维kmp)
    poj 2752 Seek the Name, Seek the Fame(kmp前缀表prefix_table的运用)
    hdu 1686 Oulipo(裸KMP)
    2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛-B-Perfect Numbers(完数)
    2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛-K-Matrix Multiplication(矩阵乘法)
    poj 3468 A Simple Problem with Integers(线段树区间lazy标记修改or树状数组)
    hdu 1698 Just a Hook(线段树区间lazy标记修改)
  • 原文地址:https://www.cnblogs.com/wenwenwei/p/10017868.html
Copyright © 2020-2023  润新知