⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jwchat.html

📁 WEB IM 实现 j2ee项目的IM功能 可继承到现有的系统当中
💻 HTML
📖 第 1 页 / 共 4 页
字号:
    statusMsg.value = away;  else    statusMsg.value = onlstatus[val];}/************************************************************************ *                   ***** EVENT - HANDLER ***** ************************************************************************ *//************************************************************************ * handleMessage ************************************************************************ */function handleMessage(aMessage) {  Debug.log(aMessage.getDoc().xml,2);  if (aMessage.getType() == 'error')    return;    /* check if this is a groupchat invite */  var x;  for (var i=0; i<aMessage.getNode().getElementsByTagName('x').length; i++)    if (aMessage.getNode().getElementsByTagName('x').item(i).getAttribute('xmlns') == 'http://jabber.org/protocol/muc#user') {      x = aMessage.getNode().getElementsByTagName('x').item(i);      break;    }    if (x) {    var from, to, reason, pass;    to = aMessage.getFrom();    var aInvite = x.getElementsByTagName('invite').item(0);    from = aInvite.getAttribute('from');    if (aInvite.firstChild && aInvite.firstChild.nodeName == 'reason' && aInvite.firstChild.firstChild)      reason = aInvite.firstChild.firstChild.nodeValue;    if (x.getElementsByTagName('password').item(0))      pass = x.getElementsByTagName('password').item(0).firstChild.nodeValue;    Debug.log("You have been invited to " + jid + " pass " + pass + " by " + from + "\nreason:" + reason,2);    var user = roster.getUserByJID(cutResource(from));    if (!user) {// users not in roster (yet)      Debug.log("creating new user "+from,3);      user = roster.addUser(new RosterUser(cutResource(from)));      user.lastsrc = eval(user.status + "Led").src;      roster.print();    }        if (typeof(user.iwArr) == 'undefined')      user.iwArr = new Array();        user.iwArr[to] = open("groupchat_invite.html?to="+escape(to)+"&from="+escape(from)+"&pass="+escape(pass)+"&reason="+escape(reason),"iw"+makeWindowName(to),"width=320,height=320,resizable=yes");        return;  }    var from = cutResource(aMessage.getFrom());  var type = aMessage.getType();  Debug.log("from: "+from+"\naMessage.getFrom(): "+aMessage.getFrom(),3);  var user = roster.getUserByJID(from);  if (user == null) {// users not in roster (yet)    Debug.log("creating new user "+from,3);    user = roster.addUser(new RosterUser(from));    user.lastsrc = eval(user.status + "Led").src;    roster.print();  }  Debug.log("got user jid: "+user.jid,3);  var aRoster = roster;  if (type != 'groupchat' && user.roster && from != aMessage.getFrom()) { // private groupchat message    aRoster = user.roster;    from = aMessage.getFrom(); // use from with resource (had been cut off first)    user = user.roster.getUserByJID(from);  }  /* change icon in roster - but not if it's a groupchat item */  if (type != 'groupchat') {    if (!user.lastsrc)      user.lastsrc = eval(user.status + "Led").src;          var images = aRoster.getUserIcons(from);    for (var i=0; i<images.length; i++)      images[i].src = messageImg.src;    /* user is not visible right now - make him pop up (lastsrc changed!) */    if (aRoster.usersHidden && user.status == 'unavailable')      aRoster.print();  }    // set current timestamp  var x;  for (var i=0; i<aMessage.getNode().getElementsByTagName('x').length; i++)    if (aMessage.getNode().getElementsByTagName('x').item(i).getAttribute('xmlns') == 'jabber:x:delay') {      x = aMessage.getNode().getElementsByTagName('x').item(i);      break;    }    if (x) {    Debug.log("found offline message: "+x.getAttribute('stamp'),3);    var stamp = x.getAttribute('stamp');    aMessage.jwcTimestamp = new Date(Date.UTC(stamp.substring(0,4),stamp.substring(4,6)-1,stamp.substring(6,8),stamp.substring(9,11),stamp.substring(12,14),stamp.substring(15,17)));  } else    aMessage.jwcTimestamp = new Date();    if (type == 'chat') {        user.chatmsgs = user.chatmsgs.concat(aMessage);        if (user.chatW && !user.chatW.closed && user.chatW.popMsgs) {      user.chatW.popMsgs();      playSound('chat_recv');    } else if (autoPopup && (autoPopupAway || onlstat == "available" || onlstat == "chat")) {      aRoster.openChat(from);      playSound('chat_recv');    } else {      if (focusWindows) window.focus();      playSound('chat_queue');      // let arrow blink for toggled groups      for (var i=0; i<user.groups.length; i++) {	if (user.groups[i] != '') {	  if (roster.hiddenGroups[user.groups[i]])	    fmd.images[user.groups[i]+"Img"].src = arrow_right_blinking.src;	}					      }    }  } else if (type == 'groupchat') {    /* handle groupchat message      */    user.chatmsgs = user.chatmsgs.concat(aMessage);    if (user.chatW && !user.chatW.closed && user.chatW.srcW && typeof(user.chatW.srcW.roster) != 'undefined' && user.chatW.popMsgs) {      user.chatW.popMsgs();    }         playSound('chat_recv');      } else {        user.messages = user.messages.concat(aMessage);    if (autoPopup && (autoPopupAway || onlstat == "available" || onlstat == "chat") && (!user.mW || user.mW.closed)) {      aRoster.openMessage(from);      playSound('message_recv');    } else if (user.mW && !user.mW.closed && user.messages.length > 0 && user.mW.document.forms[0]) {      user.mW.document.forms[0].nextButton.disabled = false;      if (focusWindows) user.mW.focus();      playSound('message_recv');    }	else {      if (focusWindows) window.focus();      playSound('message_queue');      // let arrow blink for toggled groups      for (var i=0; i<user.groups.length; i++) {	if (user.groups[i] != '') {	  if (roster.hiddenGroups[user.groups[i]])	    fmd.images[user.groups[i]+"Img"].src = arrow_right_blinking.src;	}					      }          }    // [TODO] zeank 2005-10-26    // archiving of single/plain messages  }}/************************************************************************ * handleMessageError ************************************************************************ */var error_messages = new Array();var errorW;function handleMessageError(aJSJaCPacket) {  if (aJSJaCPacket.getType() != 'error')    return;    Debug.log(aJSJaCPacket.getDoc().xml,2);    var user = roster.getUserByJID(cutResource(aJSJaCPacket.getFrom()));    if (user.chatW && !user.chatW.closed && user.chatW.putMsgHTML) {    var error = aJSJaCPacket.getNode().getElementsByTagName('error').item(0);    if (error) {      if (error.getElementsByTagName('text').item(0)) {	user.chatW.putMsgHTML(aJSJaCPacket);	playSound('error');	return;      }    }  }    error_messages = error_messages.concat(aJSJaCPacket);    if (!errorW || errorW.closed)    errorW = open("error_message.html","errorW"+makeWindowName(jid),"width=360,height=270,dependent=yes,resizable=yes");  else if (error_messages.length > 0 && errorW.document.forms[0])    errorW.document.forms[0].nextButton.disabled = false;    playSound('error');    errorW.focus();}/************************************************************************ * handlePresence ************************************************************************ */function handlePresence(presence) {  Debug.log(presence.getDoc().xml,2);  var from = cutResource(presence.getFrom());  var type = presence.getType();  var show = presence.getShow();  var status = presence.getStatus();  var aRoster = roster;  // roster subscriptions synchronisation  var x;  if (isGateway(from.substring(from.indexOf('@')+1))) {    for (var i=0; i<presence.getNode().getElementsByTagName('x').length; i++)      if (presence.getNode().getElementsByTagName('x').item(i).getAttribute('xmlns') == 'http://jabber.org/protocol/roster-subsync' ||	  presence.getNode().getElementsByTagName('x').item(i).getAttribute('xmlns') == 'http://delx.cjb.net/protocol/roster-subsync') {	x = presence.getNode().getElementsByTagName('x').item(i);	break;      }        if (x) {      Debug.log("detected roster-subsync presence",2);      var items = x.getElementsByTagName("item");      for (var i=0; i<items.length; i++) {	var aItem = items.item(i);	if (type == 'subscribe' && aItem.getAttribute("subscription") == 'both') {	  // insert into roster	  var aIQ = new JSJaCIQ();	  aIQ.setType('set');	  var query = aIQ.setQuery('jabber:iq:roster');	  var bItem = query.appendChild(aIQ.getDoc().createElement('item'));	  bItem.setAttribute('jid',from);	  if (aItem.getAttribute('name') && aItem.getAttribute('name') != '')	    bItem.setAttribute('name',aItem.getAttribute('name'));	  else 	    bItem.setAttribute('name',from.substring(0,from.lastIndexOf('@')).replace(/%/,'@'));	  var itemGroups = aItem.getElementsByTagName("group");	  for (var j=0; j<itemGroups.length; j++)	    bItem.appendChild(itemGroups.item(j));	  	  Debug.log("roster-subsync setting roster:"+aIQ.xml(),2);	  	  con.send(aIQ);	  	  // Approve Subscription Request	  var aPresence = new JSJaCPresence();	  aPresence.setTo(from);	  aPresence.setType('subscribed');	  con.send(aPresence);	  	  // Subscribe to gateway contact's presence	  var bPresence = new JSJaCPresence();	  bPresence.setTo(from);	  bPresence.setType('subscribe');	  con.send(bPresence);	  	}      }      return;    }  }    switch (type) {  case null:  case '':    break;  case 'subscribe':    if (isGateway(from)) { // automatically subscribe gateways            // Approve Subscription Request      var aPresence = new JSJaCPresence();      aPresence.setTo(presence.getFrom());      aPresence.setType('subscribed');      con.send(aPresence);            // Subscribe to Gateway's Presence      var bPresence = new JSJaCPresence();      bPresence.setTo(presence.getFrom());      bPresence.setType('subscribe');      con.send(bPresence);    }	else {      if (status)	window.open("subscriptionRequest.html?jid="+escape(from)+"&msg="+escape(status),"sr"+makeWindowName(from),"width=320,height=240");      else	window.open("subscriptionRequest.html?jid="+escape(from),"sr"+makeWindowName(from),"width=320,height=240");    }    return;  case 'unsubscribe':    if (!isGateway(from))      alert("You have been unsubscribed from "+presence.getFrom()); /* [TODO] don't use alert here */    break;  case 'error':    var user = roster.getUserByJID(from);    if (user && user.chatW && !user.chatW.closed && user.chatW.putMsgHTML) {      if (presence.getNode().getElementsByTagName('error').item(0)) {	var error = presence.getNode().getElementsByTagName('error').item(0);	if (error.getElementsByTagName('text').item(0))	  user.chatW.putMsgHTML(presence);	else if (error.firstChild && error.firstChild.nodeValue)	  user.chatW.putMsgHTML(error.firstChild.nodeValue,new Date(),from,null,true);								      }          }  }    var user = roster.getUserByJID(from);  if (!user) { // presence from unsubscribed user    Debug.log("presence from "+from+" not found on roster", 2);    return;  }    /* handle presence for MUC */  x = null; // reset  for (var i=0; i<presence.getNode().getElementsByTagName('x').length; i++)    if (presence.getNode().getElementsByTagName('x').item(i).getAttribute('xmlns') == 'http://jabber.org/protocol/muc#user') {      x = presence.getNode().getElementsByTagName('x').item(i);      break;    }    if (user.roster && x) {    Debug.log("muc presence detected", 2);    var ofrom = presence.getFrom().substring(presence.getFrom().indexOf('/')+1);        Debug.log("jabber.from:"+presence.getFrom()+", ofrom:"+ofrom,3);        var ouser = user.roster.getUserByJID(presence.getFrom());    if (!ouser) // no user? create one!      ouser = new GroupchatRosterUser(presence.getFrom(),ofrom);        var item = x.getElementsByTagName('item').item(0);        ouser.affiliation = item.getAttribute('affiliation');    ouser.role = item.getAttribute('role');    ouser.nick = item.getAttribute('nick');    ouser.realjid = item.getAttribute('jid');    if (item.getElementsByTagName('reason').item(0))      ouser.reason = item.getElementsByTagName('reason').item(0).firstChild.nodeValue;    if (actor = item.getElementsByTagName('actor').item(0)) {      if (actor.getAttribute('jid') != null)	ouser.actor = actor.getAttribute('jid');      else if (item.getElementsByTagName('actor').item(0).firstChild != null)				ouser.actor = item.getElementsByTagName('actor').item(0).firstChild.nodeValue;    }    if (ouser.role != '') {      ouser.add2Group(ouser.role+'s');            /* check if it is our own presence       * must be done here cause we want to be sure that role != ''       */            if (ouser.name == htmlEnc(user.roster.nick)) { // seems to be me	user.roster.me = ouser; // store this reference	if (user.chatW.updateMe)	  user.chatW.updateMe();      }    }        Debug.log("ouser.jid: "+ ouser.jid + ", ouser.fulljid:" + ouser.fulljid + ", ouser.name:"+ouser.name+", user.roster.nick:"+user.roster.nick,3);            var nickChanged = false;    if (x.getElementsByTagName('status').item(0)) {      var code = x.getElementsByTagName('status').item(0).getAttribute('code');      switch (code) {      case '201': // room created	/* popup dialog to ask for whether to accept default	 * configuration or make a custom room 	 */	if (confirm("A new room has been created but it awaits configuration from you. Do you want to do a custom configuration now?\nNote: Click on 'Cancel' to start with a default configuration!"))	  user.chatW.openConfig();	else {	  var iq = new JSJaCIQ();	  iq.setType('set');	  iq.setTo(user.jid);	  var query = iq.setQuery('http://jabber.org/protocol/muc#owner');	  var x = query.appendChild(iq.getDoc().createElement('x'));	  x.setAttribute('xmlns','jabber:x:data');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -