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
    }
  • 相关阅读:
    CentOS同步时间
    使用dnsmasq来提升CentOS上网速度
    bash的变量设置
    CentOS找回root密码
    知识学习网站
    webservice接口测试,使用SoapUI工具进行接口测试
    js中字符串转换为数字
    css颜色大全
    Table分页显示调整
    iframe中,页面转换后回到页面的顶部
  • 原文地址:https://www.cnblogs.com/mldonkey/p/13623584.html
Copyright © 2011-2022 走看看