2012-03-02 3 views
0

гуру программирования! Я создал чат, основанный на книге «Программирование XMPP», поэтому я включил strophe.js и gab.js в свой проект. Все в порядке, сервис работает как в IE, так и в Firefox. Но не опера, опера в этом случае бросает исключениеxmpp Opera вызывает ошибку безопасности

Uncaught exception: ReferenceError: Security violation 
Error thrown at line 2554, column 16 in <anonymous function: _processRequest>() in http://chat.aviportal.com/strophejs/strophe.js: 
req.xhr.send(req.data); 
called from line 2566, column 16 in <anonymous function: _processRequest>(i) in http://chat.aviportal.com/strophejs/strophe.js: 
sendFunc(); 
called from line 2607, column 12 in <anonymous function: _throttledRequestHandler>() in http://chat.aviportal.com/strophejs/strophe.js: 
this._processRequest(0); 
called from line 2709, column 16 in <anonymous function: _onRequestStateChange>(func, req) in http://chat.aviportal.com/strophejs/strophe.js: 
this._throttledRequestHandler(); 

Пожалуйста, дайте мне знать, если кто-нибудь были подобные проблемы, или, может быть, я буду слушать ваши советы. Спасибо заранее, Alex

Отредактировано: Прежде всего, спасибо, что ответили!

$(document).ready(function() { 
    var conn = new Strophe.Connection(
     'http://chat.aviportal.com:5280/xmpp-httpbind'); 

    conn.connect('[email protected]', 'passwd', function (status) { 
    if (status === Strophe.Status.CONNECTED) { 
     $(document).trigger('connected'); 
    } else if (status === Strophe.Status.DISCONNECTED) { 
     $(document).trigger('disconnected'); 
    } 
}); 

Это, как я initialialize соединение строфы, процесс челки на conn.connect ('[email protected]»и т.д.) Исключение брошено на этой линии. Кстати, что такое CORS, кросс-доменные запросы? Ejabberd на том же субдомене, что и php-файл, поэтому я не думаю, но есть небольшая вероятность, что это^_^

+0

Как вы загрузить эту библиотеку и какие запросы вы с ним делать? – Gumbo

+1

Отсутствие поддержки CORS менее чем в Opera 12? – gsnedders

ответ

0

Попробуйте поместить его в свой файл, если библиотеки, которые вы используете, являются jQuery- на основе:

jQuery.support.cors = true;

Эта ошибка вызвана Opera блокирует запрос межсайтовую. CORS позволит выполнять межсайтовые запросы с обычной веб-страницы, если это позволяет серверный скрипт. Подробнее here.

В настоящее время Opera допускает только межсайтовые запросы внутри расширений, если вы specify it в файле config.xml. Тем не менее, если вы попытаетесь использовать jQuery в расширении для выполнения запроса XSS, вы получите нарушение безопасности, если вы не включите в файл строку, о которой я упоминал в начале.

+0

Большое спасибо. Я постараюсь сделать это таким образом, а потом напишу, если это удастся. – Cfyzz

+0

Я думаю, что Strophe.js не использует jQuery. – Gumbo

1

Несмотря на то, что ваш веб-сервер работает в том же домене, что и ejabberd, доступ к другому порту представляет собой запрос на перекрестный домен и должен поднимать исключение безопасности. Таким образом, подключение к domain:5280 - это не то же самое, что domain:80.

Чтобы решить эту проблему, вы должны включить прокси-сервер в свою настройку. Скорее всего, у вас уже есть apache или nginx впереди, поэтому вам нужно просто прокси domain:80/http-bind переходить на domain:5280. Например, для nginx вы должны иметь что-то вроде:

location /http-bind { 
     proxy_buffering off; 
     tcp_nodelay on; 
     keepalive_timeout 55; 
     proxy_pass http://localhost:5280; 
    } 

в вашем nginx.conf.

+0

Большое спасибо Ggozad, вы знаете, я никогда не рассматривал этот порт differnet в том же домене, который считается crossdomain. Заткнули Nginx и все в порядке))) – Cfyzz

+0

@Cfyzz Рад, что он работает, пожалуйста, примите ответ, чтобы он был закрыт. – ggozad

+0

Пожалуйста, не забудьте отметить этот ответ, как принято! :) – hallvors

1

Вы можете исправить это без JQuery!

Добавить следующие в заголовке файла, из которого вы выборки данных:

Access-Control-Allow-Origin: * 
Смежные вопросы