5

Strophe.Connection.addHandler と Strophe.Connection.sendIQ について質問があります。以下のコードは機能します。

Strophe.Connection.addHandler(context.onMessage, null, 'message')

onMessage = function (msgXML){
    var to = msgXML.getAttribute('to');
    var from = msgXML.getAttribute('from');
    var fromBareJid = Strophe.getBareJidFromJid(from);
    var type = msgXML.getAttribute('type');
    var elems = msgXML.getElementsByTagName('body');
    var body = elems[0]
    var text = Strophe.getText(body);
    return true;
}

しかし、addHandler を呼び出した後に setContactData を呼び出すと、onMessage メソッドはコールバックされませんが、sendIQ の後に onRoster メソッドを呼び出すことができます。

setContactData = function(){
    var iq = $iq({
        type: 'get'
    }).c('query', {
        xmlns: 'jabber:iq:roster'
    });
    Strophe.Connection.sendIQ(iq, context.onRoster);
}

onRoster = function(iq){
    $(iq).find('item').each(function(){
        var jid = $(this).attr('jid');     
        // transform jid into an id
        var jid_id = CommonUtil.getNameFromJid(jid);
        userList = userList + "','" + jid_id;
    });

onMessage をコールバックできないのはなぜですか? 根本的な原因は何ですか?私は何が欠けていますか?

4

1 に答える 1

4

これを試して:

addHandler(context.onMessage, null, 'message', 'chat')//or 'normal'


Wrox Professional XMPP Programming with JavaScript and jQuery Book から:
addHandler() 関数は 1 つ以上のパラメーターを取ります。最初のパラメーターは、一致するスタンザを受信したときに呼び出される関数です。残りのパラメーターは一致基準です。
これらのパラメーターの完全なリストは、Strophe ソース コードからのこの省略された関数定義に示されています。

addHandler: function (handler, ns, name, type, id, from) {
// implementation omitted
}

いずれかの基準が null または未定義の場合、すべてのスタンザが一致します。それ以外の場合、スタンザは、スタンザの特定の部分で文字列が等しいという基準を満たしている場合にのみ一致します。
最後の 4 つの条件 — name、type、id、および from — は、スタンザの要素名と type、id、および from 属性に対するフィルターを指定します。これら 4 つの基準は、要素の子孫ではなく、最上位の要素でのみチェックされます。最初の基準 ns は少し異なり、最上位の要素とその直接の子要素がチェックされます。その理由はすぐにわかります。ほとんどの場合、名前基準は null で、任意のスタンザ、またはメッセージ、プレゼンス、または iq のいずれかに一致します。addHandler() の例では、受信した任意のスタンザに対して呼び出されるハンドラーをセットアップしています。
type、id、および from 基準は、およびスタンザの主要な属性と一致します。
type を使用して、通常のチャット メッセージとグループ チャット メッセージを区別したり、IQ-result スタンザを IQ-error スタンザから分離したりできます。id 基準は、特定の IQ-get リクエストに関連付けられた IQ-result など、特定のリクエストへの応答を処理するためによく使用されます。

于 2012-11-05T10:19:17.780 に答える