strophe.js - сообщения не доставляются в Chrome - PullRequest
2 голосов
/ 06 марта 2012

Я создаю пользовательское приложение для чата xmpp с использованием Strophe.js.Связь между браузером и настольным клиентом (Adium) работает отлично.Я могу отправлять сообщения через браузер в Adium и из Adium в браузер.В какой-то момент существует проблема связи между браузером и браузером, поскольку сообщения отправляются, но не доставляются.Кажется, это просто проблема Google Chrome .

Что интересно, так это то, что строфы отправляются и доставляются в порядке.Мы используем ejabberd в качестве демона сервера.

Это раздел присутствия, который я отправляю с одного аккаунта:

<presence type="away" xmlns="jabber:client">
    <show>away</show>
    <status/>
</presence>

, а то, что я получаю с другого:

<presence xmlns="jabber:client" from="test1@domain.com/3917283126133167196759537" to="test2@domain.com/1563391996133167110798391" type="away">
    <show>away</show>
    <status/>
</presence>

также раздел сообщения, которое я отправляю:

<message from="test1@domain.com/267172122813316722921543" to="test2@domain.com" type="chat" id="4915" xmlns="jabber:client">
    <active xmlns="http://jabber.org/protocol/chatstates" />
    <body>Testing...</body>
</message>

и ничего не получено в Chrome ...

РЕДАКТИРОВАТЬ: Проблема была с экранированием некоторых символов.Chrome не дал им уйти из-за проблем с безопасностью.

1 Ответ

1 голос
/ 07 марта 2012

type="away" в вашем первоначальном присутствии недействительно. Опустите атрибут type для доступного присутствия. Установите type="unavailable", когда вы уходите в автономный режим.

Поскольку ваше присутствие недействительно, вы не помечены как доступные, и вы не будете получать никаких сообщений, адресованных вашему голому JID.

Обновление: Чтобы устранить путаницу в том, что я имею в виду под вышесказанным (см. Комментарии) ...

Атрибут 'type' в этом разделе недействителен:

<presence type="away" xmlns="jabber:client">
    <show>away</show>
    <status/>
</presence>

В остальном все хорошо. Существует два типа присутствия, которые может отправлять клиент: доступный и недоступный. Стандартное доступное присутствие не имеет атрибута «тип». Недоступное присутствие имеет type="unavailable". Фактический статус пользователя (нет и т. Д.) Сообщается с помощью элементов <show/> и <status/>, а не атрибута 'type'.

Чтобы сделать указанный раздел действительным доступным присутствием, просто удалите type="away":

<presence xmlns="jabber:client">
    <show>away</show>
    <status/>
</presence>
...