Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.11.2010, 17:02
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

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). У меня после таких изменения стало работать везде. Надеюсь тем кто столкнётся с этой проблемой эта инструкция поможет.

Последний раз редактировалось Vulkan, 30.11.2010 в 17:04.
Ответить с цитированием
  #2 (permalink)  
Старый 21.05.2011, 14:53
Аватар для Илья Кантор
Администратор
Отправить личное сообщение для Илья Кантор Посмотреть профиль Найти все сообщения от Илья Кантор
 
Регистрация: 25.05.2007
Сообщений: 1,221

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Comet: NodeJS - с чего начать разработку? Vulkan AJAX и COMET 13 27.11.2010 19:25
Как в opera узнать, что popup заблокирован? Kirrr Общие вопросы Javascript 0 06.08.2010 21:00
Все-таки Opera -- мудацкий браузер Kolyaj Общие вопросы Javascript 27 29.10.2009 23:43
Проблема с Ajax запросом в IE и Opera flash_uz AJAX и COMET 0 30.04.2009 15:08
Не возвращается XML-ответ в Opera после AJAX-запроса Yojik Общие вопросы Javascript 4 17.03.2008 05:56