默認下載了最新版的socket.io,版本號是1.7.2,對IE8的支持不好,反正在IE8下收發消息都不行。在網上查了很多資料,都解決不了IE8的問題,崩潰。
最后用了一個大家比較認可的版本1.0.6,可以支持IE8:
卸載socket.io
npm uninstall socket.io
安裝1.0.6版本的socket.io
npm install socket.io@1.0.6
后面的一些版本沒有一一的去試,下了一個1.3.7版本的,還是可以支持收發消息的,只是發現IE8在關閉窗口時,無法實時觸發disconnect事件。
坑不只一個,除了socket.io的版本外,客戶端代碼,還需要在頁面頭部使用
<!DOCTYPE html>
才可以支持IE8。
下面是完整示例代碼
服務端 app.js
var app = require('http').createServer(handler); var io = require('socket.io')(app); var fs = require('fs'); var url = require("url"); app.listen(80); function handler (req, res) { var pathname = url.parse(req.url).pathname; if(pathname == "/") { pathname = "/index.html"; } fs.readFile(__dirname + pathname, 'utf-8', function (err, data) { if (err) { res.writeHead(500); return res.end('Error loading ' + pathname); } res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'}); res.end(data); }); } io.on('connection', function (socket) { console.log("Send message using: "+socket.conn.transport.name); socket.on('message', function (data) { console.log(data); socket.broadcast.emit('cast', data); }); socket.on('disconnect', function (data) { console.log('disconnect:' + data); }); });
客戶端代碼 index.html
<!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>demo</title> </head> <body> <script src="/socket.io/socket.io.js"></script> <script src="jquery-1.11.3.min.js"></script> <script> var socket = io.connect(); socket.on('connect', function () { socket.on('cast', function (data) { $("#content").append("<br />" + data); }); }); function send() { socket.emit('message', $("#msg").val()); } </script> <div id="content"></div> <input type="text" name="msg" id="msg" /> <input type="button" name="Button" value="Button" onClick="send()"> </body> </html>