Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   Socket.IO-nodejs && Opera (https://javascript.ru/forum/css-html-browser/13487-socket-io-nodejs-opera.html)

Vulkan 30.11.2010 17:02

Socket.IO-nodejs && Opera
 
Связка Socket.IO и NodeJS у меня отлично работала во всех браузерах, кроме оперы, т.к. транспорт по умолчанию там шёл XHR, пишу проблемы которые были с разными типами транспорта:
- XHR - выдавало ошибку безопасности при посылке запроса
- JSONP - сообщения от сервера до оперы шли, а вот от оперы до сервера нет
- FlashSocket - происходил connect и тут же disconnect
- WebSocket - с ним всё работает отлично (!)
Инструкция по изменению типа транспорта Socket.IO в Opera:
В комбинированном файле socket.io.js можно увидеть деление файла на транспорты такого вида(пример с WebSocket):
(function(){
  var WS = io.Transport.websocket = function(){
		io.Transport.apply(this, arguments);
	};
           .......
})

У каждого транспорта есть функция проверки на доступность в браузере пример:
WS.check = function(){...}

У меня была версия Socket.IO '0.7pre', там самым первым шёл транспорт XHR, функцию check() я изменил так:
XHR.check = function(xdomain){
	if(io.util.opera) return false;  //(!!! Если браузер опера, то не использовать)
		try {
			if (request(xdomain)) return true;
		} catch(e){}
		return false;
	};

А вот с WebSocket наоборот:
WS.check = function(){
	if(io.util.opera) return true;  //(!!! Если браузер опера, то использовать)
		return 'WebSocket' in window && WebSocket.prototype && ( WebSocket.prototype.send && !!WebSocket.prototype.send.toString().match(/native/i)) && typeof WebSocket !== "undefined";
	};

Аналогично можно поступать с другими транспортами, только делать нужно с умом. Таким образом Socket.IO можно настроить под все основные браузеры(Opera, FireFox, Safari, Chrome, IE). У меня после таких изменения стало работать везде. Надеюсь тем кто столкнётся с этой проблемой эта инструкция поможет.

Илья Кантор 21.05.2011 14:53

Вообще, 0.7 еще неотрелизена, и это не случайно. Лучше пользуйтесь пока 0.6..


Часовой пояс GMT +3, время: 05:29.