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
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM