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 }