Nodejs socket.io 在IE下面无法连接
Nodejs socket.io 在IE下面无法连接
我用的IE9 试了下IE8 IE7 也是一样无法连接无法emit 不知道什么原因 在firefox chrome 下都是正常的 求助 !!! chat.js 内容:
var express = require(‘express’), app = express(), http = require(‘http’), server = http.createServer(app).listen(8000, function(){console.log(‘server listen on 8000’)}); var io = require(‘socket.io’).listen(server);
app.get(’/’,function(req, res){ res.sendfile(__dirname+’/chat.html’); })
io.set(‘transports’, [‘websocket’,‘flashsocket’, ‘htmlfile’, ‘xhr-polling’, ‘jsonp-polling’]);
io.sockets.on(‘connection’, function(socket) { socket.on(‘msg’, function(data) { socket.broadcast.emit(‘showmsg’,data); }); socket.on(‘disconnect’, function() { // handle disconnect }); });
静态文件 chat.html :
<!doctype html> <html> <head> <meta http-equiv=“content-type” content=“text/html; charset=UTF-8”> <title>chat test</title>
</head>
<body>
<form id="form">
message: <input type="text" id='msg' value=""/>
<input type="submit" value="send" id="send"/>
</form>
<div id="showResult"></div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect(),
result = $('#showResult');
socket.on('connect', function() {
result.append($('<p>').text('Connected'));
});
socket.on('showmsg', function(msg) {
result.append($('<p>').text(msg).append($('<em>').text(' from server')));
});
$('#form').submit(function(e) {
e.preventDefault();
var msg = $('#msg').val();
result.append($('<p>').text(msg).append($('<em>').text(' from me')));
socket.emit('msg',msg);
});
</script>
</body>
</html>
针对您遇到的“Nodejs socket.io 在IE下面无法连接”的问题,这里有几个可能的原因和解决方案。首先,确保您的浏览器兼容性设置正确,并且已经安装了必要的插件(如Flash)。其次,检查您的代码中是否有任何不支持旧版IE的特性。最后,确保socket.io库已正确配置以支持多种传输方式。
可能的原因
- 浏览器兼容性问题:旧版本的IE可能不支持某些现代的Web技术。
- 缺失必要的插件:例如Flash插件对于
flashsocket
传输方式是必需的。 - 配置问题:socket.io的配置可能需要调整以适应旧版IE的需求。
解决方案
1. 确保安装了Flash插件
由于flashsocket
传输方式依赖于Flash插件,确保您的IE浏览器已经安装并启用了Flash插件。
2. 配置socket.io支持多种传输方式
在您的chat.js
文件中,确保配置了多种传输方式,以便在不同的环境中使用不同的传输方式:
var express = require('express'),
app = express(),
http = require('http'),
server = http.createServer(app).listen(8000, function(){
console.log('server listen on 8000');
});
var io = require('socket.io').listen(server);
app.get('/', function(req, res){
res.sendfile(__dirname + '/chat.html');
});
// 设置支持的传输方式
io.set('transports', ['websocket', 'flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']);
io.sockets.on('connection', function(socket) {
socket.on('msg', function(data) {
socket.broadcast.emit('showmsg', data);
});
socket.on('disconnect', function() {
// 处理断开连接的情况
});
});
3. 调整客户端代码
确保客户端代码能够处理不同浏览器的行为差异。您可以尝试以下调整:
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>chat test</title>
</head>
<body>
<form id="form">
message: <input type="text" id='msg' value=""/>
<input type="submit" value="send" id="send"/>
</form>
<div id="showResult"></div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect({transports: ['websocket', 'flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']});
var result = $('#showResult');
socket.on('connect', function() {
result.append($('<p>').text('Connected'));
});
socket.on('showmsg', function(msg) {
result.append($('<p>').text(msg).append($('<em>').text(' from server')));
});
$('#form').submit(function(e) {
e.preventDefault();
var msg = $('#msg').val();
result.append($('<p>').text(msg).append($('<em>').text(' from me')));
socket.emit('msg', msg);
});
</script>
</body>
</html>
通过以上调整,您应该可以解决在IE9及以下版本浏览器中无法连接的问题。如果问题仍然存在,请进一步检查浏览器的开发者工具中的网络请求和错误信息,以获取更多调试线索。
没人回复啊 难道没人遇到这种问题吗 ,求助大神 !
**忘记说了,在本地用localhost访问IE是可以的 ,换成局域网的192.168.1.133或外网的地址IE就不行了