用node+socket.io+redis构建了一个消息推送服务。其他项目都通过jquery的$.getScript()方式载入服务上的socket.io.js和一个封装的api脚本message.js,然后初始化的时候传入回调函数获取消息数量及消息展示方式。
在所有标准浏览器上都没问题。不管是不是同域下。但在ie下就不行。只有在同域(我测试的时候是同ip)下是没问题的。
个人觉得是socket.io的机制,因为在ie下没有用websocket,所以产生问题。有做过类似的给点意见吗?
0906补充
我发在github socket.io 上的问题描述 v 0.99 my node server on http://192.168.1.186:6789
my web server on http://192.168.1.14:85
*router code
app.get('/api', function (req, res) {
var _userid = req.query.userid;
req.session.userid = _userid;
fs.readFile('./node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.min.js', 'utf-8', function (err, data1) {
if (err)
console.log(err);
else {
fs.readFile('./public/javascripts/message.js', 'utf-8', function (err, data2) {
if (err)
console.log(err);
else {
res.setHeader('content-type', 'application/x-javascript; charset=UTF-8');
res.end(data1 + data2);
}
});
}
});
*message.js code
var socket;
var serverHost='http://192.168.1.186';
var serverPort='6789'
$(function () {
socket = io.connect(serverHost, { port:serverPort });
socket.on('connect', function () {
console.info('socket success!');
});
*client code
$.getScript("http://192.168.1.186:6789/api?userid=1265",function(){
//notice.init({userid:_1265,getNoticeNum:IBD.util.getNoticeNum,showNotice:IBD.util.showNotice});
});
all the code can work well in firefox and chrome ,but in ie
io.set('authorization', function (hsData, accept) {
console.log(hsData.headers.cookie) // undefined
})
hao can i solve the problem or where is the problem? thank you!
i'm so sorry my english is so poor
再次补充
在ie下,如果忽略掉hsData.headers.cookie而直接创建socket.io是没有问题的,flashsocket,xhr-polling,jsop-polling都可以通过,现在的问题就是,这种跨域的获取方式在ie下无法获取到hsData.headers.cookie,怎样才能解决.