webIm中自制HTMleditor

原文出处


  最近做一个项目,需要实现web端的im聊天功能。考虑到执行效率不能用extjs,最后决定采用 jquery+div+css(没办法只有重新发明轮子了^_^)。个人一直比较反感js,感觉这门语言对开发人员太 不人性化,尤其在调试、兼容性等问题,简直是场灾难(呵呵,工作之余发下牢骚)。项目进行到现在,一般 功能实现也差不多了,回过头来对当初一些问题做个总结,留个名便于以后查询。该代码在ie6、ie7、firefox上测试通过。

一、html编辑器。
1.表情符插入:
        对于这个功能在使用者看来实现是理所当然的事,但要自己实现却有2个难度:一是html textarea控件中并
不支持html代码,即在textarea中使用<img src='...'>标签不会显示图片;二是在信息输入框输入文字的同时要支持表情符的任意插入,即在光标处插入表情。在网上查了很多资料,参考了extjs htmleditor源码,使用iframe方式总算把这问题搞定,以下是主要实现代码:

初始化htmleditor实现:

/*初始化htmleditor*/
 function initInputHtmleditor(){
     var iframeSrc = $.browser.msie? "javascript:false;" : "javascript:;";
     var msgIndiv = '<IFRAME name="messageSend" id="messageSend" frameBorder="0" src="'+iframeSrc+'"></IFRAME>';
     $('#msgInputDiv').html(msgIndiv);//把iframe加入到页面显示div中
      
      /*通过div id获取iframe的document对象*/
     var doc = getIframeDoc('messageSend');
      doc.open();
     doc.write(getDocMarkup());
     doc.close();
     
     $(doc).ready(function(){
         doc.designMode="on";
         //doc.contentEditable = true;
     });
     
     /*加载键盘触发事件*/
     $(doc).bind('keypress',function(event){//添加处理事件
         addSendMsg(event);
     });
 }
 
 /*获取iframe document对象*/
 function getIframeDoc(iframeId){
     var iframeObj = $('#'+iframeId);
     var wnd = getIframeWnd(iframeId);
     var doc = $.browser.msie ? wnd.document : (iframeObj.contentDocument || wnd.document);
     return doc;
 }
 
 /*获取iframe document window 对象*/
 function getIframeWnd(iframeId){
     return $.browser.msie ? document.frames(iframeId) : window.frames[iframeId];
 }
 
 /*
  * 返回html document标志字符串
 该方法中p元素的css margin和padding属性一定要设为0,否则ie下处理回车事件时行距会很大,因为ie在iframe下对回车是按<p></p>处理的*/
 function getDocMarkup(){
     return '<html><head><style type="text/css">' +
             'body{border:0;margin:0px;padding:0px;height:98%;cursor:text;' +
             'word-break:break-all;}' +//字体自动换行
             'p{margin:0px;padding:0px;}' +
            '</style></head><body></body></html>';
 }

插入表情代码:

  /*
   * 在文档光标处插入文本
   * 插入示例:
   * var img = "<img src='"+basePath+"face/01.gif' ></img>";
   * var doc = getIframeDoc('messageSend');//取iframe document对象
   * insertAtCursor(doc,img,'messageSend');
   * */
  function insertAtCursor(doc,value,focusElId){
      if($.browser.msie){//ie
         var wnd = getIframeWnd(focusElId);//聚焦元素id
         wnd.focus();
         var r = doc.selection.createRange();
         if(r){
             r.collapse(true);
             r.pasteHTML(value);
         }
     }else if($.browser.mozilla || $.browser.opera){//firefox ,opera
         var wnd = getIframeWnd(focusElId);//聚焦元素id
         wnd.focus();
         doc.execCommand("InsertHTML", false, value === undefined ? null : value);
     }else if($.browser.safari){//safari
         doc.execCommand("InsertText", false, value === undefined ? null : value);
     }
 }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebIM说明 WebIM是一款基于jQuery的一款web即时通讯插件,姑且这么称呼吧。插件最大程度实现了IM的常用功能,除即时通讯的常用功能外,还加入了:消息盒子、窗口抖动、添加删除好友、最近联系人、超时登录界面、网站小秘书、聊天记录、发送频率限制、发送产品、发送名片、发送表情、产品分享、黑名单、举报、收藏、公告、智能网址过滤、消息提醒、修改资料、名片二维码、禁止粘贴、收起联系人列表、推荐好友等30余项改进。全浏览器兼容。 插件调用简单方便,只需在现有的web系统加入几行代码,理论上可嵌入任何web系统。 2012年项目,已不再维护。 配置 $(function() { $(document).FnWebIM({ autoLogin :true, //boolean型,默认是否自动登录,true:自动登录,false:手动登录,默认为true msgRefreshTime :1000, //number型,消息刷新时间,单位为ms friendRefreshTime :10000, //number型,好友刷新时间,单位为ms showSecretary :true, //boolean型,默认是否显示小秘书,true:显示,false:不显示,默认为true noticeContent :"唐僧师徒历经千辛万苦,终于见到了佛祖……", //string型,公告内容 为空时不显示公告 sendPicture :true, //boolean型,是否允许发送图片,true:允许,false:不允许,默认为true msgMaxSize :300, //number型,单条消息最大允许字符 msgSound :false, //boolean型,是否开启声音提醒,true:开启,false:关闭,默认为true defaultWindow :"" //string型,登录后打开新聊天窗口,此处接收的参数为联系人的uid,否则会出错 }); }); 详细说明文档 http://www.zi-han.net/case/im/help.html 示例 http://www.zi-han.net/developer/721.html 注意 请在服务器(如localhost)环境下打开

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值