Подтвердить что ты не робот

Определение типов транспорта на стороне клиента

Мне нужно использовать jsonp-опрос для IE и xhr-опрос для Firefox, поэтому я попытался определить типы транспортов на стороне клиента следующим образом:

    if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)){ //test for Firefox/x.x or Firefox x.x (ignoring remaining digits); 
            var socket = io.connect(VG.NODE_SERVER_URL,{ 
                    transports:['xhr-polling'] 
            }); 
    } else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ 
            var socket = io.connect(VG.NODE_SERVER_URL,{ 
                    transports:['jsonp-polling'] 
            }); 
    } else { 
            var socket = io.connect(VG.NODE_SERVER_URL); 
    }

Я протестировал его на Firefox и добавил запись в socket.io-client lib. В

https://github.com/LearnBoost/socket.io-client/blob/master/dist/socket.io.js#L1509

option.transports ["xhr-polling", "flashsocket", "htmlfile", "xhr-polling", "jsonp-polling"], что является правильным. Однако при

https://github.com/LearnBoost/socket.io-client/blob/master/dist/socket.io.js#L1679

Я не знаю, почему транспорты меняются на ["htmlfile", "jsonp- polling", "xhr-polling"], который имеет ту же последовательность, что и я определенных на стороне сервера.

Почему он не использует предыдущий вариант?

4b9b3361

Ответ 1

Ошибка теперь исправлена ​​в версии socket.io 0.9.6, я могу использовать ее, и она отлично работает:

socket = io.connect(HOST_REMOTE, {
    transports: ['xhr-polling']
});

В версии 1.0.0 и выше:

socket = io.connect(HOST_REMOTE, {
    transports: ['polling']
});

Ответ 2

есть ошибка в socket.io.client.

поэтому вы не можете устанавливать транспорты в клиенте...

function Socket (options) {
this.options = {
    port: 80
  , secure: false
....
};

io.util.merge(this.options, options);
....
};

должен быть io.util.merge(this.options, options,0);....