Ошибка подключения ejabberd XMPP с использованием strophejs

Я пытаюсь запустить ЭТОТ код XMPP JS, используя ejabberd на стороне сервера. Вот мой код подключения:

$(document).bind('connect', function (ev, data) {
    console.log("connect "+JSON.stringify(data));
    var conn = new Strophe.Connection("http://localhost:5280/http-bind");

    conn.connect(data.jid, data.password, function (status) {
        console.log("status"+status);
        if (status === Strophe.Status.CONNECTED) {
            $(document).trigger('connected');
        } else if (status === Strophe.Status.DISCONNECTED) {
            $(document).trigger('disconnected');
        }
    });

    Hello.connection = conn;
});

Я получаю status = 1. и через некоторое время он начинает показывать: Uncaught Error: 11, flXHR::abort(): Failed, The abort() call failed to complete.

Мой ejabberd работает на http://localhost:5280/admin/, а admin@ejab является администратором.

Вот полный код:

<!DOCTYPE html>
<html>
  <head>
    <title>Strophe.js Basic Example</title>
    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js'></script>
    <script src='../strophe.js'></script>
<!--    <script src='scripts/flXHR.js'></script>
    <script src='scripts/strophe.flxhr.js'></script>-->
    <script src='basic.js'></script>
  </head>
  <body>
    <div id='login' style='text-align: center'>
      <form name='cred'>
        <label for='jid'>JID:</label>
        <input type='text' id='jid'>
        <label for='pass'>Password:</label>
        <input type='password' id='pass'>
        <input type='button' id='connect' value='connect'>
      </form>
    </div>
    <hr>
    <div id='log'></div>
  </body>
</html>

basic.js

var BOSH_SERVICE = 'http://localhost:5222/http-bind';
var connection = null;

function log(msg) 
{
    $('#log').append('<div></div>').append(document.createTextNode(msg));
}

function rawInput(data)
{
    log('RECV: ' + data);
}

function rawOutput(data)
{
    log('SENT: ' + data);
}

function onConnect(status)
{
    if (status == Strophe.Status.CONNECTING) {
    log('Strophe is connecting.');
    } else if (status == Strophe.Status.CONNFAIL) {
    log('Strophe failed to connect.');
    $('#connect').get(0).value = 'connect';
    } else if (status == Strophe.Status.DISCONNECTING) {
    log('Strophe is disconnecting.');
    } else if (status == Strophe.Status.DISCONNECTED) {
    log('Strophe is disconnected.');
    $('#connect').get(0).value = 'connect';
    } else if (status == Strophe.Status.CONNECTED) {
    log('Strophe is connected.');
    connection.disconnect();
    }
}

$(document).ready(function () {
    connection = new Strophe.Connection(BOSH_SERVICE);
    connection.rawInput = rawInput;
    connection.rawOutput = rawOutput;

    $('#connect').bind('click', function () {
    var button = $('#connect').get(0);
    if (button.value == 'connect') {
        button.value = 'disconnect';

        connection.connect($('#jid').get(0).value,
                   $('#pass').get(0).value,
                   onConnect);
    } else {
        button.value = 'connect';
        connection.disconnect();
    }
    });
});

вывод:

Strophe is connecting.
SENT: <body rid='745165534' xmlns='http://jabber.org/protocol/httpbind' to='ejab' xml:lang='en' wait='60' hold='1' content='text/xml; charset=utf-8' ver='1.6' xmpp:version='1.0' xmlns:xmpp='urn:xmpp:xbosh'/>

person Manish Kumar    schedule 05.09.2015    source источник
comment
Какую версию сервера ejabberd вы используете? Кажется, у вас проблема с междоменными доменами, но она автоматически обрабатывается в последних версиях, поэтому я предполагаю, что вы используете старую версию ejabberd.   -  person Mickaël Rémond    schedule 07.09.2015
comment
Какой браузер вы используете?   -  person Mickaël Rémond    schedule 08.09.2015
comment
хром Версия 40.0.2214.91 (64-разрядная версия)   -  person Manish Kumar    schedule 08.09.2015


Ответы (1)


status = 1 означает подключение. В основном это означает, что сервер BOSH недоступен.

Введите http://localhost:5280/http-bind/ в Chrome, чтобы увидеть, действительно ли вы можете добраться до сервера BOSH.

Если ваш сервер действительно находится на локальном хосте (ваш компьютер, на котором хранится hello.html), вы можете закомментировать flXHR.js и strophe.flxhr.js в заголовке hello.html, поскольку они предназначены для междоменного доступа.

например hello.html на вашем рабочем столе и с использованием домена (xmpp-сервера), который находится на другом компьютере, который уже не разрешен Chrome из-за безопасности междоменного доступа.

Если сервер hello.html и xmpp расположены на одном компьютере, у него не будет проблем с междоменным доступом.

В любом случае, эти 2 файла, похоже, не в состоянии преодолеть лимит междоменного доступа, установленный браузером Chrome несколько лет назад. Используйте параметр Chrome «--disable-web-security», чтобы обеспечить междоменный доступ для теста.

Наконец, в браузере Chrome щелкните правой кнопкой мыши, чтобы выбрать «Проверить элемент» -> «Сеть», перезагрузите hello.html и войдите в систему, чтобы проверить доступ к http-bind. Они должны подсказать, что пошло не так.

person pny_hk    schedule 10.09.2015
comment
Я обновил свой вопрос, который поможет вам, как я иду. Я попробовал это в Mozilla, и вывод похож на Strophe is connecting. SENT: <body rid='745165534' xmlns='http://jabber.org/protocol/httpbind' to='ejab' xml:lang='en' wait='60' hold='1' content='text/xml; charset=utf-8' ver='1.6' xmpp:version='1.0' xmlns:xmpp='urn:xmpp:xbosh'/> Когда я просматриваю http://localhost:5280/http-bind/, он показывает мне страницу с надписью ejabberd mod_http_bindAn implementation of XMPP over BOSH (XEP-0206)This web page is only informative. To use HTTP-Bind you need a Jabber/XMPP client that supports it. - person Manish Kumar; 10.09.2015