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