zoukankan      html  css  js  c++  java
  • hook webSocket

    window.top.func_WebSocket_msg=console.log
    var g_WS_backup = WebSocket;
    //定义全局变量,用于保存WebSocket原函数地址
    var g_WebSocket_msg = [];
    //定义全局变量,用于保存新建立的WebSocket
    WebSocket = function(url, protocols) {
        //重写WebSocket函数
        var m_newWebSocket = new Object;
        //定义覆盖变量“m_newWebSocket”,用于新创建WebSocket
        var m_send_addr = function(msg) {}
        //定义新变量函数“m_send_addr”,用于保存WebSocket中“Send”函数的地址,便于处理替换原函数。
        m_newWebSocket.ID = window.top.g_WebSocket_msg.length + 1;
        //记录ID
        window.top.func_WebSocket_msg('newWebSocket', m_newWebSocket.ID, url, protocols);
        //callminiblink中设置的函数func_WebSocket_msg
        m_newWebSocket = new window.top.g_WS_backup(url, protocols);
        //建立新的WebSocket连接,使用全局变量中“g_WS_backup”保存的WebSocket原函数来创建。
        m_send_addr = m_newWebSocket.send;
        //保存新“WebSocket.send”地址,下面将进行重写。
        m_newWebSocket.send = function WebSocket_HookSend(p_msg) {
            //重写“WebSocket.send”函数
            arguments[0] = window.top.func_WebSocket_msg('WebSocketSend', m_newWebSocket.ID, 
    
    p_msg);
            m_send_addr.apply(this, arguments);
            //通过 apply() 方法,能够编写用于不同对象的方法,防止出现非法调用的问题,该方法接受数组形式的参数。
        }
        // m_newWebSocket.onmessage=(data)=>{
        //     console.log(data)
        // }
        console.log(m_newWebSocket);
        m_newWebSocket.addEventListener('close', function() {
            //监听断开连接事件
            window.top.func_WebSocket_msg('WebSocketClose', m_newWebSocket.ID);
            var i = 0;
            for (i; i < window.top.g_WebSocket_msg.length; i++) {
                //枚举WebSocket
                if (window.top.g_WebSocket_msg[i] == m_newWebSocket) {
                    //比较WebSocket是否相等
                    window.top.g_WebSocket_msg.splice(i, 1);
                    window.top.func_WebSocket_msg('WebSocketClose', m_newWebSocket.ID);
                    //若相等,则删除并跳出循环。
                    break;
                }
            }
        })
        window.top.g_WebSocket_msg.push(m_newWebSocket)
        //保存WebSocket数据
        return m_newWebSocket
    }
  • 相关阅读:
    11个Linux基础面试问题
    OSI模型
    戴文的Linux内核专题:10配置内核(6)
    面向对象实验四(输入输出流)
    计算机程序的思维逻辑 (2)
    计算机程序的思维逻辑 (1)
    java基础3.0:Java常用API
    java基础2.0:Object、Class、克隆、异常编程
    java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final
    Ajax工作原理(转)
  • 原文地址:https://www.cnblogs.com/mldonkey/p/13623584.html
Copyright © 2011-2022 走看看