Je travaille avec Ejabberd et Orbited et j'ai quelques problèmes avec mes fonctions de rappel JavaScript qui ne sont pas appelées. Ce qui suit est mon fichier JavaScript où la connexion TCPSocket arrive et j'ai deux fonctions de rappel à savoirLes rappels Javascript fonctionnent dans Firefox mais pas dans Chrome ou Safari
onSocketConnect
: qui est appelé lorsque le mis en orbite connexion établie avec le port 5222 du serveur XMPP et
onLoginSuccess
: qui est appelé Le problème auquel je suis confronté est la connexion qui se passe avec succès, mais mes rappels ne sont appelés que lorsque j'utilise FireFox et non pas en utilisant Safari ou Google Chrome. Je suis totalement ignorant de ce qui cause ce problème mais je suis sûr que la méthode est appelée car l'utilisateur est connecté et est affiché en ligne dans la console d'administration ejabberd.
TCPSocket = Orbited.TCPSocket;
Orbited.settings.port = 8000;
Orbited.settings.hostname = 'localhost';
document.domain = document.domain;
<script src='http://localhost:8000/static/protocols/xmpp/xmpp.js'></script>
//xmpp.js file is included after this which is available with the Orbited. I have not included the code here.
<% if current_user %>
<script>
notifier = ' ';
user = "<%= current_user.jabber_id %>";
alert(user);
password = '123456';
domain = XMPPDOMAIN;
/* function onLoginSuccess(){
$('.status').html("Connected and Logged In");
xmpp_client.set_presence('available');
} */
var onLoginSuccess = function(){
$('.status').html("Connected and Logged In");
}
function onLoginFailure(){
alert('User could not be logged in');
}
function connectSuccess(){
$('.status').html("Connection Successful.");
}
function connectFailure(){
$('.status').html("Connection Failed!");
}
function onSetupNotification(){}
xmpp_client = new XMPPClient();
xmpp_client.connect('localhost',5222);
xmpp_client.onPresence = function(ntype, from) {
alert('Presence message' + ntype + ' From :' + from)
}
xmpp_client.onSocketConnect = function(domain, connectSuccess, connectFailure){
var domain = XMPPDOMAIN;
$('.status').html('Connected');
alert(user);
if(domain)
{
xmpp_client.connectServer(domain, connectSuccess, connectFailure);
xmpp_client.login(user, password, onLoginSuccess, onLoginFailure);
xmpp_client.set_presence('available');
}
}
function send_message(id, msg){
var j_id = id + '@' + 'siddharth-ravichandrans-macbook-pro.local';
alert('jid_id' + j_id);
var status = xmpp_client.msg(j_id, msg);
alert(status);
}
xmpp_client.onMessage = function(jid, username, text) {
alert('message-recieved');
if ($('.discussion-area').length > 0){
$('.discussion-area').append('<div class=\'new-message\'>' + text + '</div>');
return false;
}
}
/* self.login = function(nick, pass, s, f) {
conn.onread = setUser;
success = s;
failure = f;
user = nick;
bare_jid = nick + "@" + domain;
full_jid = bare_jid + "/Orbited";
self.send(construct(LOGIN, [user, pass]));
}
self.set_presence = function(status, status_msg) {
self.send(EXT_PRESENCE[0] + full_jid + EXT_PRESENCE[1] + room_jid + EXT_PRESENCE[3] + status + EXT_PRESENCE[4] + status_msg + EXT_PRESENCE[5]);
}
*/
</script>
<% end %>
Cela fait partie des xmpp.js que je glissai quand je l'ai installé et mis en orbite afin de tester si mes demandes ont été effectivement fournis j'ai ajouté une alerte dans la méthode de connexion comme suit
...
...
self.login = function(nick, pass, s, f) {
conn.onread = setUser;
success = s;
failure = f;
user = nick;
bare_jid = nick + "@" + domain;
full_jid = bare_jid + "/Orbited";
self.send(construct(LOGIN, [user, pass]));
alert("bazingaa");
}
self.connectServer = function(d, s, f) {
success = s;
failure = f;
doma
...
...
Maintenant, je n'ai aucune idée de comment cela a obtenu mes rappels et j'apprécierais vraiment de l'aide à ce sujet.
Merci
En fait, je trouve que la suppression du xmpp_client.set_presence et en le déplaçant à l'onLoginSuccess est ce qui semble avoir fait le tour. La minute où j'ajoute la méthode set_presence après la méthode de connexion appelle la fonctionnalité échoue dans chrome. Alors pourquoi cela l'empêcherait-il d'invoquer le rappel en cas de connexion réussie?
var onLoginSuccess = function(){
$('.status').html("Connected and Logged In");
xmpp_client.set_presence('available');
}
xmpp_client.onSocketConnect = function(domain, connectSuccess, connectFailure){
var d = "";
$('.status').html('Connected');
xmpp_client.connectServer(d, connectSuccess, connectFailure);
xmpp_client.login(user, password, onLoginSuccess, onLoginFailure);
//xmpp_client.set_presence('available');
}
Aide!
"Je suis sûr que la méthode' xmpp_client.login' est appelée "- Êtes-vous sûr qu'elle est appelée?Avez-vous mis un point d'arrêt dedans? Et quelle est l'utilisation de 'document.domain = document.domain;'? –
Le document.domain = document.domain entre en jeu uniquement lorsque je l'exécute en production en tant que sous-domaine. Ici, ça ne fait pas grand-chose. Oui J'avais des messages d'alerte configurés qui ne sont appelés que dans Firefox. De plus, lors de la connexion, l'utilisateur apparaît dans ma console d'administration Web ejabberd, donc je sais qu'il a été appelé. – Sid
Dans Chrome, l'utilisateur se connecte-t-il, selon la console d'administration, mais «xmpp_client.login» n'est pas appelé? Est-ce exact? Cela ressemble à un problème dans xmpp.js. –