apicloud apicloud

注册
查看: 18160|回复: 67

[新手教程] apicloud+rongcloud2 实现即时通讯的心血历程

 

业余车手

UID:46814

主题:
152
帖子:
628
云币:
18255

一周年中秋节社会摇圣诞节老司机你吃屎!首长好!我还是个孩子!托马斯全旋女朋友不想上班!装逼侠超人锤子侠SB侠我李白贼6

[新手教程] apicloud+rongcloud2 实现即时通讯的心血历程

 
18160 67 | 发表于 2015-12-24 09:52:39 |阅读模式 | |
本帖最后由 周枫 于 2017-3-4 10:54 编辑


请尊重作者的辛勤劳动,转载请注明!

圣诞节快乐~~~

承接apicloud+融云实现即时通讯的心血历程

更新 0126

apicloud+rongcloud2+sqlite 实现即时通讯的心血历程(三)

更新2016.10.25
                                                    apicloud+rongcloud2+sqlite  实现即时通讯的心血历程——汇总
继续:
不提供源码包,也不要加我QQ要,我不给,我不卖,纯技术交流,互相学习

你们发现我的错误也不告诉我,不讲究啊!

这篇文章主要是本人升级完成融云2和之前有一些逻辑的补充地方,还没有升级到本地sqlite存储,正在做,怕之后代码混乱了,这次就整理发出一篇


2015-12-25补充:
上传项目相关图片素材,在附件列表位置
PS:图片你们也找我要,自己找点不好嘛~~~

更新日志(有点杂,有些优化记不清了,想起来会补充上,具体不会的可以留言或者加我QQ:95834073,只支持讨论,不支持源码打包):
1. 升级rongcloud2,效果不错,推荐升级,暂时没有丢失信息的情况发现
2. 增加echo.js,懒加载图片,有人和我建议说onload 就可以实现,我没试哈
3.  优化发送多张图片时依次逐张发送,使用递归
4. 发送状态中,提示正在发送 loading图片
5. 图片发送失败时,容错处理,onerror
6.  通讯录逻辑变更,点击通讯录直接进入群组聊天,点击群组内人员进行私聊
7. 增加系统消息,自动刷新通讯录,点击跳转应用页面
8. 修改发送语音时录音不停止问题
9. 增加聊天时左右翻看历史会话图片功能

为了方便,依然增加附件 开发思路的文档

PS:这次就不截图了,很多人说我截图就是在 秀恩爱,我实际就是啊,你打我啊

废话不说,上代码,代码页面思路等同前篇文章结构,这次只发出js文件,html没有太多变化:
hh_index_window.js (历史会话列表页面,融云方法总页面)
/*
* 把所有的融云类的处理全部放在消息列表页,然后通过APICloud的api.sendEvent和api.addEventListener 来处理融云的一些事件。
记住除了消息列表页其他页面不要做融云的任何链接处理
*/
//定义融云
var rong;
//内容高度
var rect_h;
//header高度
var header_h;
//是否后台状态,后台值为1,前台为0
//var is_ht = 0;
var is_fir = 0;
//发送图片数组
var send_img_attrs;
apiready = function() {
        //       api.showProgress({
        //                              title : '加载中...',
        //                              modal : false
        //                       });

        rect_h = api.pageParam.rect_h;
        header_h = api.pageParam.header_h;
        send_img_attrs = [];
        //加载融云模块
        rong = api.require('rongCloud2');
        //融云初始化
        rongCloud();

        //监听来自会话页面发送消息的事件
        api.addEventListener({
                name :'sendMessage'
        }, function(ret) {
                if (ret&& ret.value) {
                       var value = ret.value;
                       switch(value.type) {
                               case'text':
                                      sendMessage('' + value.type + '', '' + value.targetId + '','' + value.content + '', '' + value.extra + '', '' + value.conversationType +'');
                                      break;
                               case'pic':
                                      //判断是照相还是选择,选择是数组,照相是一个
                                      switch(value.pic_source) {
                                              case 'camera':
                                                     send_img_attrs[0] = value.imgSrc;
                                                     sendPicture(value.targetId ,  send_img_attrs ,value.extra , value.conversationType );
                                                     break;
                                              case 'album':
                                                     //                                                     alert(JSON.stringify(value));
                                                     var img_list = value.img_list;
                                                     
                                                     for (var i = 0; i < img_list.length; i++) {
                                                             //                                                     alert(value.img_list.image_list.path+'123123');
                                                             //图片真实地址
                                                             var img_temp = img_list.path;
                                                             var img_url;
                                                             //文件后缀名,如:png,jpg, mp4
                                                             var suffix = img_list.suffix;
                                                             var obj_scan =api.require('UIMediaScanner');
                                                             if (api.systemType == 'ios') {
                                                                    
                                                                    //虚拟路径转真实路径
                                                                    obj_scan.transPath({
                                                                            path : img_temp
                                                                    }, function(ret) {
                                                                            //发送图片格式
                                                                            if (suffix == 'png' || suffix =='jpg') {
                                                                                   creatSendImgAttrs(i, ret.path, value.targetId, value.extra,value.conversationType);
                                                                            }
                                                                    });
                                                             } else if (api.systemType ="android") {

                                                                    //发送图片格式
                                                                    if (suffix == 'png' || suffix == 'jpg') {
                                                                            send_img_attrs = img_temp;
                                                                    }
                                                             }
                                                     }

                                                     if (api.systemType == 'android') {
                                                             sendPicture(value.targetId ,send_img_attrs , value.extra , value.conversationType);
                                                     }
                                                     
                                                     break;
                                      }
                                      break;
                               case'voi':
                                      sendVoice('' + value.targetId + '', '' + value.voicePath +'', '' + value.duration + '', '' + value.extra + '', '' +value.conversationType + '');
                                      break;
                       }
                }
        });

        //监听来自会话页面获取历史会话的事件
        api.addEventListener({
                name :'getHistory'
        }, function(ret) {
                if (ret&& ret.value) {
                       var value = ret.value;
                       getHistoryMessagesById(value.type,value.target_id, value.old_msg_id, value.msg_count);
                }
        });

        //监听来自通讯录页面获取最新会话id的事件
        api.addEventListener({
                name :'getOldMessageId'
        }, function(ret) {
                if (ret&& ret.value) {
                       var value = ret.value;
                       getLatestMessagesById(value.conver_type,value.target_id, value.count, function(mes_list) {
                               varold_msg_id = -1;
                               if(mes_list == "") {
                                      mes_list = [];
                                      if (getJsonObjLength(mes_list) != 0) {
                                              old_msg_id =mes_list[0].messageId;
                                      }
                               }

                               //发送target_id获取最新会话id
                              api.sendEvent({
                                      name : 'setOldMessageId',
                                      extra : {
                                              old_msg_id ld_msg_id
                                      }
                               });
                       });

                }
        });

        //监听来注销页面的事件
        api.addEventListener({
                name :'logout'
        }, function(ret) {
               logoutRongCloud();
        });

        //检查连接状态
        setInterval(function() {
               getConStatus();
        }, 10000);

        //监听进入后台时
        //       api.addEventListener({
        //               name : 'pause'
        //       }, function(ret, err) {
        //               is_ht = 1;
        //       });
        //监听程序返回前台时
        //       api.addEventListener({
        //               name : 'resume'
        //       }, function(ret, err) {
        //               is_ht = 0;
        //               //返回后清空消息提示
        //               api.cancelNotification({
        //                       id : -1
        //               });
        //       });

        //系统消息未读使用
        //       var messages = Math.floor((Math.random()*10)+1);
        //       document.getElementById("messages").innerHTML =messages;
}
//是否是首页还是会话页面获取消息的flag
var is_index = 'index';
/*
* 打开会话页面
* 周枫
* 2015-08-03
*/
function openHhList(target_id, old_msg_id, person_name, conver_type, h_from,avatar_url) {
        is_index = 'frame';
        setTimeout(function() {
                //清除未读信息
               cleanMsg(target_id, conver_type);
               getCoversationList();
        }, 100);

        //如果是群组,则获取群组人员姓名json
        if (conver_type == "GROUP") {
               getGroupListById(target_id, function(group_list) {
                       api.openWin({
                               name :'hh_chat_window',
                               url :'hh_chat_window.html',
                               bounces :true,
                               delay :0,
                              scrollToTop : true,
                               allowEdit: true,
                              slidBackEnabled : false,
                               pageParam: {
                                      'targetId' : target_id,
                                      'old_msg_id' : parseInt(old_msg_id),
                                      'conver_type' : conver_type,
                                      'person_name' : person_name,
                                      'header_h' : header_h,
                                      'conver_type' : conver_type,
                                      'h_from' : h_from,
                                      'avatar_url' : avatar_url
                               }
                       });
                       $api.addEvt($api.byId('back'), 'click', function(){
                              api.closeWin();
                       });
                });
        } else {
                api.openWin({
                       name : 'hh_chat_window',
                       url : 'hh_chat_window.html',
                       bounces : true,
                       delay : 0,
                       scrollToTop : true,
                       allowEdit : true,
                       slidBackEnabled : false,
                       pageParam : {
                              'targetId' : target_id,
                              'old_msg_id' : parseInt(old_msg_id),
                              'conver_type' : conver_type,
                              'person_name' : person_name,
                              'header_h' : header_h,
                              'conver_type' : conver_type,
                               'h_from': h_from,
                              'avatar_url' : avatar_url
                       }
                });
               $api.addEvt($api.byId('back'), 'click', function() {
                       api.closeWin();
                });
        }

        //       });
}

/**
* 打开消息列表页面
* 周枫
* 2015.08.17
*/
function openNewsList() {
        api.openWin({
                name :'xx_index_window',
                url :'xx_index_window.html',
                bounces :true,
                delay : 300,
                animation : {
                       duration : 400
                },
                scrollToTop :true,
                pageParam : {
                       'header_h' : header_h
                }
        });
}

/*
* 融云初始化
* 周枫
* 2015-08-03
*/
function rongCloud() {
        var token = $api.getStorage('mytoken');
        //融云初始化
        rong.init(function(ret, err) {
                if(ret.status == 'error') {
                       openNoticeLogout('初始化失败,请检查网络后重新登录');
                } else {
                       //监听新消息
                       receiveMessageListener();
                       //连接
                       rong.connect({
                               token :'' + token + ''
                       }, function(ret, err) {
                               if(ret.status == 'success') {
                                      //清空所有会话
                                      //                                                                                   clearConversations();
                                      //消息列表

                                      getCoversationList();

                                      //初始化当前人员群组信息
                                      //                       initPersonGroup();
                                      //                       quitGroup();
                               } else {

                                      var err_code = err.code;
                                      switch(err_code) {
                                              case 31003:
                                                     openNoticeLogout('服务器不可用,请检查网络状况后重新登录');
                                                     break;
                                              case 31004:
                                                     openNoticeLogout('身份认证失败,请检查网络状况后重新登录');
                                                     break;
                                              case 31002:
                                                     openNoticeLogout('服务器认证失败,请检查网络状况后重新登录');
                                                     break;
                                              case 33002:
                                                     openNoticeLogout('服务端数据库错误,请检查网络状况后重新登录');
                                                     break;
                                              case 31000:
                                                     openNoticeLogout('服务器超时,请检查网络状况后重新登录');
                                                     break;
                                              case -10000:
                                                     openNoticeLogout('信息初始化失败,请检查网络状况后重新登录');
                                                     break;
                                              case -10002:
                                                     openNoticeLogout('参数错误,请检查网络状况后重新登录');
                                                     break;
                                      }
                               }
                       });
                }
        });

}

/*
* 监听新消息
当有新消息传来时,利用sendEvent发出一个事件,同时传递消息内容,可以在会话页面进行一次监听接收
* 周枫
* 2015-08-03
*/

function receiveMessageListener() {
       rong.setOnReceiveMessageListener(function(ret, err) {
                if (ret) {
                       if (ret.result.message.objectName =='RC:TxtMsg' && ret.result.message.conversationType == 'SYSTEM') {
                               //判断系统消息是否是群组操作
                               varmes_text = ret.result.message.content.text;

                               varmes_str = '<a href=\"javascript:reloadTxlData(';
                               varmes_reload = mes_text.indexOf(mes_str);
                               if(mes_reload != -1) {
                                      var mes_group_id_begin = mes_reload;
                                      var mes_group_id_end = mes_text.indexOf(');\">');
                                      var mes_group_id = mes_text.substring(mes_group_id_begin +mes_str.length, mes_group_id_end);
                                      var mes_arrs = mes_group_id.split(',');
                                      if (mes_arrs.length != 0) {
                                              //执行刷新群组
                                              reloadTxlData(mes_arrs[0],mes_arrs[1]);
                                      }

                               }
                       }

                       //如果后台运行的时候,则提示新的消息
                       //升级融云2之后废弃
                       //                       if (is_ht == 1&& api.systemType == 'android') {
                       //                              var mes_obj = ret.result.message.objectName;
                       //                              var noti_msg = '您有一条新的消息,请注意查收';
                       //                              switch(mes_obj) {
                       //                                      case 'RC:VcMsg':
                       //                                             noti_msg = '您有一条新的[语音]消息,请注意查收';
                       //                                             break;
                       //                                      case 'RC:TxtMsg':
                       //                                             noti_msg = '您有一条新的[文本]消息,请注意查收';
                       //                                             break;
                       //                                      case 'RC:ImgMsg':
                       //                                             noti_msg = '您有一条新的[图片]消息,请注意查收';
                       //                                             break;
                       //                              }
                       //                              notificationMessage(noti_msg);
                       //                       }
                       //发送事件
                       api.sendEvent({
                               name :'getNewMessage',
                               extra : {
                                      data : ret.result.message
                               }
                       })
                       //                       api.alert({
                       //                              msg:'receiveMessageListener'+is_index
                       //                 },function(ret,err){
                       //                        //coding...
                       //                 });
                       //                                             cleanMsg(ret.result.message.targetId,ret.result.message.conversationType);
                       //是否是首页还是会话页面获取消息的flag,首页时刷新会话列表,会话页面时不刷新
                       if (is_index == 'index') {
                              getCoversationList();
                       }

                }
        })
}

/*
* 获取会话消息列表
* 周枫
* 2015-08-03
*/
function getCoversationList() {
        //       api.alert({
        //               msg : 'getCoversationList,'+is_fir
        //  },function(ret,err){
        //         //coding...
        //  });
        if (is_fir == 0) {
               api.showProgress({
                       title : '加载中...',
                       modal : false
                });
        }

        //消息列表
        rong.getConversationList(function(ret,err) {
                if(ret.status == 'success') {
                       //               api.hideProgress();
                       //发送会话历史列表返回增加头像和姓名和时间的json
                       sendConListReJson(ret, function(list_json) {
                               //                                                                           api.alert({
                               //                                                                                                   msg:'list_json1,'+JSON.stringify(list_json)
                               //                                                                            });
                               if(is_fir == 0) {
                                      api.hideProgress();
                                      is_fir++;
                               }

                              beforeRender(list_json);
                               //                                                                                   api.alert({
                               //                                                                    msg:'list_json,'+JSON.stringify(list_json)
                               //                                              });

                               varhtml_type = template.render('hhlist_script', list_json);
                              document.getElementById('hhlist_div').innerHTML = html_type;
                              
                               //获取未读消息显示右上角
                              showUnreadCount();

                               varaui_img = $api.domAll('.aui-user-view-cell');
                               //如果之前有系统消息,需要改成从1开始循环,去掉系统消息
                               for (vari = 0; i < aui_img.length; i++) {
                                      (function(i) {
                                              var id =$api.attr(aui_img, "id");
                                              //长按删除,3秒
                                              var myHanmer = newHammer($api.byId(id));
                                             myHanmer.on("press", function(e) {
                                                     api.confirm({
                                                             title : "提示",
                                                             msg : "确认删除当前会话吗?",
                                                             buttons : ["取消", "确定"]
                                                     }, function(ret, err) {
                                                             if (1 == ret.buttonIndex) {
                                                                    return;
                                                             } else {
                                                                    //删除会话
                                                                    clearMessageById($api.attr(myHanmer.input.target, 'id'),$api.attr(myHanmer.input.target, 'alt'));
                                                             }
                                                     });
                                                     //                                                     alert($api.attr(myHanmer.input.target,'id'));
                                              });
                                      })(i);
                               }
                       });
                } else {
                       var errJson = JSON.stringify(err);
                       api.toast({
                               msg : '对不起,获取会话消息列表失败'
                       });
                       //                       api.alert({
                       //                              msg : "对不起,获取会话消息列表失败"
                       //                       });
                }
        });
}

/**
*  获取某一会话的最新消息记录
*/
function getLatestMessagesById(conver_type, target_id, count, callback) {
        rong.getLatestMessages({
               conversationType : conver_type,
                targetId :target_id + '',
                count :parseInt(count)
        }, function(ret, err) {
                if(ret.status == "success") {
                       callback(ret.result);
                } else {
                       api.toast({
                               msg : '获取某一会话的最新消息记录失败'
                       });
                       //                       api.alert({
                       //                              msg : '获取某一会话的最新消息记录失败'
                       //                       });
                }
        })
}

/**
* 获取历史聊天记录
* 周枫
* 2015.08.20
*/
function getHistoryMessagesById(conver_type, target_id, old_msg_id, msg_count){
        //               api.alert({
        //                       msg :'getHistoryMessages' + conver_type + ',' + target_id + ',' + old_msg_id + ',' +msg_count
        //         },function(ret,err){
        //                 //coding...
        //         });
        rong.getHistoryMessages({
               conversationType : conver_type,
                targetId :target_id,
               oldestMessageId : parseInt(old_msg_id),
                count :msg_count
        }, function(ret, err) {

                if(ret.status == 'success') {
                       //                                             alert('222:' + JSON.stringify(ret.result));
                       api.sendEvent({
                               name :'setHistory',
                               extra : {
                                      data : ret.result
                               }
                       });
                } else {
                       api.toast({
                               msg : '对不起,获取历史会话信息失败'
                       });
                       //                       api.alert({
                       //                              msg : '对不起,获取历史会话信息失败'
                       //                       });
                }
        })
}

/*
*发送消息的函数
注意要放在消息列表页,不要放在会话页面
在会话页面利用sendEvent发出一个发送消息的事件,在消息列表页监听
* 周枫
* 2015-08-03
*/
function sendMessage(type, targetId, content, extra, conversationType) {
        //               api.alert({
        //                       msg:'type:'+type+',targetId:'+targetId+',content:'+content+',conversationType:'+conversationType
        //         },function(ret,err){
        //                 //coding...
        //         });
        rong.sendTextMessage({
                conversationType: '' + conversationType + '',
                targetId : ''+ targetId + '',
                text : '' +content + '',
                extra : '' +extra + ''
        }, function(ret, err) {
                if(ret.status == 'prepare') {
                       //单聊准备发送,向会话页面发送正在发送消息事件
                       api.sendEvent({
                               name :'insertSendMessage',
                               extra : {
                                      data : ret.result
                               }
                       })
                       //清除未读信息
                       cleanMsg(ret.result.message.targetId,conversationType);
                } else if(ret.status == 'success') {
                       api.execScript({
                               name :'hh_chat_window',
                               frameName: 'hh_chat_frame',
                               script :'removeload(' + ret.result.message.messageId + ');'
                       });
                       //成功后处理 10.30 注释原因:返回统一刷新
                       //                       getCoversationList();
                } else if(ret.status == 'error') {
                       var err_code = err.code;
                       switch(err_code) {
                               case30014:
                                      //                                      openNoticeLogout('服务器不可用,请检查网络状况后重新登录');
                                      api.toast({
                                              msg : '对不起,信息发送失败'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,信息发送失败'
                                      //                                      });
                                      break;
                               case30003:
                                      api.toast({
                                              msg : '对不起,信息发送失败,服务器超时'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,信息发送失败,服务器超时'
                                      //                                      });
                                      break;
                               case31009:
                                      api.toast({
                                              msg : '对不起,信息发送失败,您在对方黑名单中'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,信息发送失败,您在对方黑名单中'
                                      //                                      });
                                      break;
                               case -10000:
                                      api.toast({
                                              msg : '对不起,信息发送失败,未调用 init 方法进行初始化'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,信息发送失败,未调用 init 方法进行初始化'
                                      //                                      });
                                      break;
                               case-10001:
                                      api.toast({
                                              msg : '对不起,信息发送失败,未调用 connect 方法进行连接'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,信息发送失败,未调用 connect 方法进行连接'
                                      //                                      });
                                      break;
                               case-10002:
                                      api.toast({
                                              msg : '对不起,信息发送失败,输入参数错误'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,信息发送失败,输入参数错误'
                                      //                                      });
                                      break;
                       }
                }
        });
}
var send_count = 0;
/**
* 发送图片消息
* 周枫
* 2015.08.11
* @param {Object} sendMsg
*/
function sendPicture(target_id, img_attrs, extra, conversationType) {
//        $api.rmStorage('send_img_attrs');
//                api.alert({
//                       msg : 'img_attrs:' + img_attrs.length +',target_id:' + target_id
//                },function(ret, err) {
//                       //coding...
//                });
        rong.sendImageMessage({
               conversationType : conversationType,
                targetId :target_id,
                imagePath :img_attrs[send_count],
                extra : extra
        }, function(ret, err) {
                if(ret.status == 'prepare') {
                       //单聊准备发送,向会话页面发送正在发送消息事件
                       api.sendEvent({
                               name :'insertSendMessage',
                               extra : {
                                      data : ret.result
                               }
                       })
                       //清除未读信息
                       cleanMsg(ret.result.message.targetId,conversationType);
                } else if(ret.status == 'progress') {

                } else if(ret.status == 'success') {
                       api.execScript({
                               name :'hh_chat_window',
                               frameName: 'hh_chat_frame',
                               script :'removeload(' + ret.result.message.messageId + ');'
                       });
                       //发送成功后递归逐张发送图片
                       send_count++;
                       if(send_count < img_attrs.length) {
                              setTimeout(function() {
                                      sendPicture(target_id, img_attrs, extra, conversationType);
                               }, 500);
                       } else {
                              send_count = 0;
                               img_count= 0;
                       }
                       
                       
                } else if (ret.status== 'error') {
                       var err_code = err.code;
                       switch(err_code) {
                               case30014:
                                      //                                      openNoticeLogout('服务器不可用,请检查网络状况后重新登录');
                                      api.toast({
                                              msg : '对不起,图片发送失败'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,图片发送失败'
                                      //                                      });
                                      break;
                               case30003:
                                      api.toast({
                                              msg : '对不起,图片发送失败,服务器超时'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,图片发送失败,服务器超时'
                                      //                                      });
                                      break;
                               case31009:
                                      api.toast({
                                              msg : '对不起,图片发送失败,您在对方黑名单中'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,图片发送失败,您在对方黑名单中'
                                      //                                      });
                                      break;
                               case-10000:
                                      api.toast({
                                              msg : '对不起,图片发送失败,未调用 init 方法进行初始化'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,图片发送失败,未调用 init 方法进行初始化'
                                      //                                      });
                                      break;
                               case-10001:
                                      api.toast({
                                              msg : '对不起,图片发送失败,未调用 connect 方法进行连接'
                                      });
                                      //                                      api.alert({
                                      //                                              msg : '对不起,图片发送失败,未调用 connect 方法进行连接'
                                      //                                      });
                                      break;
                               case-10002:
                                      api.toast({
                                              msg : '对不起,图片发送失败,输入参数错误'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,图片发送失败,输入参数错误'
                                      //                                      });
                                      break;
                       }
                }
        });
}

/*
* 发送语音消息
* 周枫
* 2015.08.12
*
*/
function sendVoice(target_id, voicePath, duration, extra, conversationType) {
        rong.sendVoiceMessage({
                conversationType: conversationType,
                targetId :target_id,
                voicePath :voicePath,
                duration :parseInt(duration),
                extra : extra
        }, function(ret, err) {
                if(ret.status == 'prepare') {
                       //单聊准备发送,向会话页面发送正在发送语音事件
                       api.sendEvent({
                               name :'insertSendMessage',
                               extra : {
                                      data : ret.result
                               }
                       })
                       //清除未读信息
                       cleanMsg(target_id, conversationType);
                } else if(ret.status == 'success') {
                       api.execScript({
                               name :'hh_chat_window',
                               frameName: 'hh_chat_frame',
                               script :'removeload(' + ret.result.message.messageId + ');'
                       });
                       removefile(voicePath);
                } else if(ret.status == 'error') {
                       var err_code = err.code;
                       switch(err_code) {
                               case30014:
                                      api.toast({
                                              msg : '对不起,语音发送失败'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,语音发送失败'
                                      //                                      });
                                      break;
                               case30003:
                                      api.toast({
                                              msg : '对不起,图片发送失败,服务器超时'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,图片发送失败,服务器超时'
                                      //                                      });
                                      break;
                               case31009:
                                      api.toast({
                                              msg : '对不起,图片发送失败,您在对方黑名单中'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,图片发送失败,您在对方黑名单中'
                                      //                                      });
                                      break;
                               case-10000:
                                      api.toast({
                                              msg : '对不起,图片发送失败,未调用 init 方法进行初始化'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,图片发送失败,未调用 init 方法进行初始化'
                                      //                                      });
                                      break;
                               case-10001:
                                      api.toast({
                                              msg : '对不起,图片发送失败,未调用 connect 方法进行连接'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,图片发送失败,未调用 connect 方法进行连接'
                                      //                                      });
                                      break;
                               case-10002:
                                      api.toast({
                                              msg : '对不起,图片发送失败,输入参数错误'
                                      });
                                      //                                      api.alert({
                                      //                                             msg : '对不起,图片发送失败,输入参数错误'
                                      //                                      });
                                      break;
                       }
                }
        });
}

/*
* 发送会话历史列表返回增加头像和姓名和时间的json
* 周枫
* 2015-08-05
*/
function sendConListReJson(con_list, callback) {
        //                                             api.alert({
        //                                                            msg :'ret'+JSON.stringify(con_list)
        //                                       },function(ret,err){
        //                                               //coding...
        //                                        });
        //       var hh_index = $api.getStorage('hh_index');
        //由于安卓返回时空字符串,自行处理一下
        if (con_list.result == '') {
               con_list.result = [];
        }
        //       if ( typeof (hh_index) != "undefined" &&(is_fir == 0)) {
        //               callback(hh_index);
        //        }else {
        api.ajax({
                url :BASE_URL_ACTION + '/rongcloud/getConListReList',
                method :'post',
                dataType :'json',
                timeout : 60,
                data : {
                       values : {
                              "con_list" : con_list,
                              "ip_addr" : BASE_SERVER_IP,
                              "app_type" : BASE_APP_TYPE
                       }
                }
        }, function(ret, err) {
                //                                                    api.alert({
                //                                                            msg :'ret'+JSON.stringify(ret)
                //                                       },function(ret,err){
                //                                               //coding...
                //                                       });
                //                        api.alert({
                //                                             msg :'err'+JSON.stringify(err)
                //                        },function(ret,err){
                //                                //coding...
                //                        });
                if (ret) {
                       if (ret.status == 'success') {
                               //                                                            $api.setStorage('hh_index_list', ret.result);
                               //                                     $api.setStorage('hh_index', ret);

                              callback(ret);
                       } else {
                              api.toast({
                                      msg : '对不起,获取会话列表失败'
                               });
                               //                              api.alert({
                               //                                     msg : '对不起,获取会话列表失败'
                               //                              });
                       }

                } else {
                       api.toast({
                               msg : '对不起,获取会话列表失败'
                       });
                       //                       api.alert({
                       //                              msg : '对不起,获取会话列表失败'
                       //                       });
                }
        });
        //        }

}

/*
* 清空某一会话的所有聊天消息记录
* 周枫
* 2015-08-05
*/
function clearMessageById(user_id, conver_type) {
        api.showProgress({
                title : '加载中...',
                modal : false
        });
        //首先移除会话列表
        rong.removeConversation({
               conversationType : conver_type + '',
                targetId :user_id + ''
        }, function(ret, err) {

                if(ret.status == 'success') {
                       //再真实删除聊天记录
                       rong.clearMessages({
                               conversationType: conver_type + '',
                               targetId: user_id + ''
                       }, function(ret, err) {

                               if(ret.status == 'success') {
                                      //                                      api.toast({
                                      //                                             msg : '操作成功',
                                      //                                             duration : 1000,
                                      //                                             location : 'middle'
                                      //                                      });
                                      //重新获取会话列表
                                      getCoversationList();
                               }
                       });
                }
        })
}

/*
* 清空所有会话及会话消息
* 周枫
* 2015-08-05
*/
function clearConversations() {
        rong.clearConversations({
               conversationTypes : ['PRIVATE', 'GROUP', 'SYSTEM']
        }, function(ret, err) {
                if(ret.status == 'success') {
                       api.toast({
                               msg : '清空成功'
                       });
                } else {
                       api.alert({
                               msg : '对不起,删除失败'
                       });
                }
                //重新获取会话列表
               getCoversationList();
        })
}

/*
* 清除未读信息红点和条数
* 周枫
* 2015-08-03
*/
function cleanMsg(target_id, conver_type) {
        //       api.alert({
        //               msg : target_id + ',' + conver_type
        //  },function(ret,err){
        //         //coding...
        //  });

        rong.clearMessagesUnreadStatus({
               conversationType : conver_type,
                targetId :target_id
        }, function(ret, err) {
                if(ret.status != "success") {
                       api.toast({
                               msg : '清除未读信息失败'
                       });
                       //                       api.alert({
                       //                              msg : '清除未读信息失败'
                       //                       });
                }
        })
        //       rong.getHistoryMessages({
        //               conversationType : conver_type,
        //               targetId : target_id,
        //               oldestMessageId : -1,
        //               count : 1
        //       }, function(ret, err) {
        //               if (ret.status != "success") {
        //                      api.alert({
        //                              msg : '清除未读信息失败'
        //                       });
        //               }
        //        })
}

/**
* 废弃,因为融云初始化有问题
* 同步当前用户所属的群组信息到融云服务器
* PS:由于apicloud的参数问题,所以暂时启用了
* 周枫
* 2015.08.24
*/
function initPersonGroup() {
        var person_id =$api.getStorage('person_id');
        var identity_id =$api.getStorage('identity');
        var ip_addr = BASE_SERVER_IP;
        //获取当前人员群组信息
        api.ajax({
                url :BASE_URL_ACTION + '/group/queryMyGroupForApp?person_id=' + person_id +'&identity_id=' + identity_id + '&ip_addr=' + ip_addr,
                method :'get',
                dataType :'text'
        }, function(ret, err) {
                var p_group =eval('(' + ret + ')');
                if(p_group.success == true) {
                       //同步当前用户所属的群组信息到融云服务器
                       rong.syncGroup({
                               groups :
                               //                              p_group.groups
                               [{
                                      //                                      groupId : '975',
                                      //                                      groupName : '张福才',
                                      //                                      portraitUri :'../../image/person/group.png'
                                      id : '975',
                                      name : '张福才',
                                      portraitUrl : '../../image/person/group.png'
                               }, {
                                      //                                      groupId : '976',
                                      //                                      groupName : '张福才2',
                                      //                                      portraitUri :'../../image/person/group.png'
                                      id : '976',
                                      name : '张福才2',
                                      portraitUrl : '../../image/person/group.png'
                               }]
                       }, function(ret, err) {
                              api.toast({
                                      msg : JSON.stringify(ret)
                               });
                       })
                } else {
                       api.alert({
                               msg : '初始化群组信息失败:' + p_group.info
                       });
                }
        });
}

/**
* 获取新消息时,提示
* 向用户发出震动、声音提示、灯光闪烁、状态栏消息等通知
* 周枫
* 2015.09.28
* 升级融云2之后废弃
* @param {Object} content_msg
*/
//function notificationMessage(content_msg) {
//        api.notification({
//                notify : {
//                       title : '理想家校通',
//                       content : content_msg,
//                       updateCurrent : true
//                }
//        }, function(ret, err) {
//                //               if (ret &&ret.id) {
//                //                      api.alert(ret.id);
//                //               }
//        });
//}

function beforeRender(data) {
        var g_time = new getTimeTemplate();
        //g_time为想在template的标签中执行的函数
        data.g_time = g_time;
}

/*
* //是否是首页还是会话页面获取消息的flag
* 周枫
* 2015-10-30
*/
function reFlag() {
        //       api.alert({
        //               msg : is_index
        //  },function(ret,err){
        //         //coding...
        //  });
        is_index = 'index';
}

/**
* 获取当前融云连接状态
* 周枫
* 2015.12.03
*/

function getConStatus() {
        rong.getConnectionStatus(function(ret,err) {

                if(ret.status == 'success') {
                       var con_status = ret.result.connectionStatus;
                       switch(con_status) {
                               case'DISCONNECTED':
                                      openNoticeLogout('当前连接已经断开,请重新登录');
                                      break;
                               case'KICKED':
                                      openNoticeLogout('当前用户在其他地区登录,请重新登录');
                                      break;
                               //                              case'NETWORK_UNAVAILABLE':
                               //                                     api.showProgress({
                               //                                             title : '当前网络不可用',
                               //                                             text : '请检查网络状况',
                               //                                             modal : true
                               //                                     });
                               //                              break;
                               case'SERVER_INVALID':
                                      openNoticeLogout('服务器异常,请检查网络状况后重新登录');
                                      break;
                               case'TOKEN_INCORRECT':
                                      openNoticeLogout('当前连接已经断开,请重新登录');
                                      break;
                               case'CONNECTED':
                                      api.hideProgress();
                                      break;
                       }
                }

        })
}

function openNoticeLogout(msg_text) {
        api.alert({
                msg :msg_text
        }, function(ret, err) {
                //断开融云链接
               logoutRongCloud();
        });
}

/**
* 退出融云
* 周枫
* 2015.12.03
*/
function logoutRongCloud() {
        rong.logout(function(ret, err) {
                if (ret) {
                       goLogin();
                }
        });
}

/**
* 退出到首页
* 周枫
* 2015.10.23
*/
function goLogin() {
        api.openWin({
                name :'login',
                url :'../../login.html',
                scrollToTop :true,
                bounces :false,
                opaque :false,
                showProgress: true,
               vScrollBarEnabled : false,
               hScrollBarEnabled : false,
               slidBackEnabled : false,
                delay : 300,
                animation : {
                       duration : 400
                }
        });
        api.closeFrameGroup({
                name :'group'
        });
}

/**
* 接收系统消息后自动刷新群组
* 周枫
* 2015.12.04
* @param {Object} group_id
* @param {Object} group_type
*/
function reloadTxlData(group_id, group_type) {
        api.showProgress({
                title : '请等待...',
                modal : false
        });
        var jsfun1 = 'reloadData();';
        var jsfun2 = 'closeMyself();';
        var jsfun3 = 'loadData();';

        //删除历史会话列表纪录
        if (group_type == 0) {
               api.execScript({
                       name : 'root',
                       frameName : 'hh_index',
                       script : 'clearMessageById(\'' + group_id +'\',\'GROUP\');'
                });
        }
        //根据当前tab判断是否关闭list
        var cur_tab = 0;
        if ( typeof($api.getStorage('cur_index_tab')) != 'undefined') {
                cur_tab =$api.getStorage('cur_index_tab');
        }
        if (cur_tab != 1) {
               api.execScript({
                       name : 'root',
                       frameName : 'txl_index',
                       script : jsfun1
                });
               setTimeout(function() {
                       api.execScript({
                               name :'root',
                               frameName: 'txl_index',
                               script :jsfun2
                       });
                       api.hideProgress();
                }, 1000);
        } else {
                api.execScript({
                       name : 'root',
                       frameName : 'txl_index',
                       script : jsfun1
                });
               setTimeout(function() {
                       api.execScript({
                               name :'root',
                               frameName: 'txl_index',
                               script :jsfun2
                       });
                }, 2000);
               setTimeout(function() {
                       api.execScript({
                               name :'root',
                               frameName: 'txl_index',
                               script :jsfun3
                       });
                       api.hideProgress();
                }, 3000);
        }

}

/**
* 删除文件
* 周枫
* 2015.08.10
* @param {Object} path
*/
function removefile(path) {
        var fs = api.require('fs');
        fs.remove({
                path : path
        }, function(ret, err) {

                if(ret.status != true) {
                       //                       api.alert({
                       //                              msg : err.msg
                       //                       }, function(ret, err){
                       //                              //coding...
                       //                       });
                }
        });
}

/**
*  获取所有未读消息数
* 周枫
* 2015.12.12
* @param {Object} callback
*/
function getTotalUnreadCount(callback) {
        rong.getTotalUnreadCount(function(ret,err) {
                if(ret.status == 'success') {
                       callback(ret.result);
                }
        })
}

/**
* 未读总条数,显示在APP右上角
* 周枫
* 2015.12.12
*/
function showUnreadCount() {
        getTotalUnreadCount(function(unread_con){
                //设置应用图标右上角数字,支持所有iOS手机,以及部分Android手机,如小米和三星的某些型号
               api.setAppIconBadge({
                       badge : unread_con
                });
        });
}

//判断提交数字
var img_count = 0;
//发送图片的数组
var attrs = [];
/**
* ios调用发送图片重组数据
* @param {Object} img_sum
* @param {Object} img_url
* @param {Object} targetId
* @param {Object} extra
* @param {Object} conversationType
*/
function creatSendImgAttrs(img_sum,img_url,targetId,extra,conversationType) {
        
        attrs[img_count] = img_url;
        img_count++;
        if(img_count == img_sum){
               sendPicture(targetId , attrs , extra , conversationType);
        }
}

hh_chat_window.js(会话内容页面,window)
var header_t;
//顶部header高度
var header_h;
//发送id
var target_id;

var conver_type;
var h_from;
var person_name;
apiready = function() {
        //定位header位置,留出上面电池等空隙,苹果需要
        var header = $api.byId('aui-header');
        $api.fixStatusBar(header);
        header_t =$api.offset($api.byId('cloud'));
        header_h = api.pageParam.header_h;
        //当前会话用户id和当前会话历史消息从消息列表页点击传递进来
        target_id = api.pageParam.targetId;
        //真实姓名
        person_name = api.pageParam.person_name;

        conver_type = api.pageParam.conver_type;
        var avatar_url = api.pageParam.avatar_url;

        //从哪个页面进入的聊天界面
        h_from = api.pageParam.h_from;
        initHeaer();

        //当前target_id的最大会话id
        var old_msg_id =api.pageParam.old_msg_id;
        //打开聊天内容frame页面
        api.openFrame({
                name :'hh_chat_frame',
                scrollToTop :true,
                allowEdit :true,
                url :'../../html/huihua/hh_chat_frame.html',
                pageParam : {
                       'target_id' : target_id,
                       'old_msg_id' : old_msg_id,
                       'conver_type' : conver_type,
                       'avatar_url' : avatar_url,
                       'header_h' : header_h
                },
                rect : {
                       x : 0,
                       y : header_h,
                       w : api.winWidth,
                       h : api.winHeight - header_h - 50,
                },
                //页面是否弹动为了下拉刷新使用
                bounces :true
        });

        //安卓关闭
        if (api.systemType == 'android') {
               backFromChatForAndroid();
        }
        if (conver_type != 'SYSTEM') {
                //加载uichatbox模块
               initUichatbox();

        }

};

/**
* 安卓点击返回的时候
* 周枫
* 2015.08.31
*/
function backFromChatForAndroid() {
        api.addEventListener({
                name :"keyback"
        }, function(ret, err) {
                back();
        });
}

/**
*返回会话列表页面
* 周枫
* 2015.08.08
*/
function back() {
        //       api.alert({
        //               msg : 'back'
        //  },function(ret,err){
        //         //coding...
        //  });

        switch(h_from) {
                case'hh_index':
                       //清楚红点
                       api.execScript({
                               name : 'root',
                               frameName: 'hh_index',
                               script :'cleanMsg("' + target_id + '","' + conver_type + '");'
                       });
                       //重新获取会话列表
                       api.execScript({
                               name :'root',
                               frameName: 'hh_index',
                               script :'getCoversationList();'
                       });
                       //是否是首页还是会话页面获取消息的flag
                       api.execScript({
                               name :'root',
                               frameName: 'hh_index',
                               script :'reFlag();'
                       });

                       break;
                case'txl_index':
                       //清楚红点
                       api.execScript({
                               name :'root',
                               frameName: 'hh_index',
                               script :'cleanMsg("' + target_id + '","' + conver_type + '");'
                       });
                       //重新获取会话列表
                       api.execScript({
                               name :'root',
                               frameName: 'hh_index',
                               script :'getCoversationList();'
                       });
                       //是否是首页还是会话页面获取消息的flag
                       api.execScript({
                               name :'root',
                               frameName: 'hh_index',
                               script :'reFlag();'
                       });
                       //                       api.execScript({
                       //                              name : 'root',
                       //                              frameName : 'txl_index',
                       //                              script : 'loadData();'
                       //                       });
                       api.execScript({
                               name :'root',
                               frameName: 'txl_index',
                               script :'showMyself();'
                       });

                       break;
                case 'txl_content':
                       //清楚红点
                       api.execScript({
                               name :'root',
                               frameName: 'hh_index',
                               script :'cleanMsg("' + target_id + '","' + conver_type + '");'
                       });
                       //重新获取会话列表
                       api.execScript({
                               name :'root',
                               frameName: 'hh_index',
                               script :'getCoversationList();'
                       });
                       //是否是首页还是会话页面获取消息的flag
                       api.execScript({
                               name :'root',
                               frameName: 'hh_index',
                               script :'reFlag();'
                       });
                       api.execScript({
                               name :'txl_content_window',
                               frameName: 'txl_content_frame',
                               script :'loadData();'
                       });
                       api.execScript({
                               name :'txl_content_window',
                               frameName: 'txl_content_frame',
                               script :'showMyself();'
                       });

                       break;
        }

        api.closeWin();
}

function reloadTxlIndex() {
        //       api.alert({
        //               msg : '11111'
        //       }, function(ret, err) {
        //               //coding...
        //       });
        api.execScript({
                name :'root',
                frameName :'txl_index',
                script :'loadData();'
        });
}

/**
*加载uichatbox模块
* 周枫
* 2015.08.08
*/
function initUichatbox() {
        //引入chatbox
        var chatBox = api.require('UIChatBox');
        //获取表情存放路径
        var sourcePath = BASE_EMOTION_PATH;
        //表情存放目录
        var emotionData;
        //存储表情
        getImgsPaths(sourcePath,function(emotion) {
                emotionData =emotion;
        })
        chatBox.open({
                placeholder :'',
                //输入框显示的最大行数(高度自适应)
                maxRows : 4,
                //自定义表情文件夹(表情图片所在的文件夹,须同时包含一个与该文件夹同名的.json配置文件)的路径
                //.json文件内的 name 值必须与表情文件夹内表情图片名对应
                emotionPath :sourcePath,
                //聊天输入框模块可配置的文本
                texts : {
                       //(可选项)JSON对象;录音按钮文字内容
                       recordBtn : {
                               //(可选项)字符串类型;按钮常态的标题,默认:'按住 说话'
                              normalTitle : '按住 说话',
                               //(可选项)字符串类型;按钮按下时的标题,默认:'松开 结束'
                              activeTitle : '松开 结束'
                       }
                },
                //模块各部分的样式集合
                styles : {
                       //(可选项)JSON对象;输入区域(输入框及两侧按钮)整体样式
                       inputBar : {
                              borderColor : '#d9d9d9',
                               bgColor :'#f2f2f2'
                       },
                       //(可选项)JSON对象;输入框样式
                       inputBox : {
                              borderColor : '#B3B3B3',
                               bgColor :'#FFFFFF'
                       },
                       //JSON对象;表情按钮样式
                       emotionBtn : {
                               normalImg: BASE_CHATBOX_PATH + '/chatBox_face1.png'
                       },
                       //(可选项)JSON对象;附加功能按钮样式,不传则不显示附加功能按钮
                       extrasBtn : {
                               normalImg: BASE_CHATBOX_PATH + '/chatBox_add1.png'
                       },
                       //JSON对象;键盘按钮样式
                       keyboardBtn : {
                               normalImg: BASE_CHATBOX_PATH + '/chatBox_key1.png'
                       },
                       //(可选项)JSON对象;输入框左侧按钮样式,不传则不显示左边的语音按钮
                       speechBtn : {
                               normalImg: BASE_CHATBOX_PATH + '/chatBox_key1.png'
                       },
                       //JSON对象;“按住 录音”按钮的样式
                       recordBtn : {
                               //(可选项)字符串类型;按钮常态的背景,支持rgb,rgba,#,图片路径(本地路径,fs://,widget://);默认:'#c4c4c4'
                               normalBg: '#c4c4c4',
                               //(可选项)字符串类型;按钮按下时的背景,支持rgb,rgba,#,图片路径(本地路径,fs://,widget://);默认:'#999999';
                              //normalBg 和 activeBg 必须保持一致,同为颜色值,或同为图片路径
                               activeBg: '#999999',
                               color :'#000',
                               size : 14
                       },
                       //(可选项)JSON对象;表情和附加功能面板的小圆点指示器样式,若不传则不显示该指示器
                       indicator : {
                               //(可选项)字符串类型;配置指示器的显示区域;默认:'both'
                               //取值范围:
                               //both(表情和附加功能面板皆显示)
                              //emotionPanel(表情面板显示)
                              //extrasPanel(附加功能面板显示)
                               target :'both',
                               color :'#c4c4c4',
                              activeColor : '#9e9e9e'
                       }
                },
                //(可选项)点击附加功能按钮,打开的附加功能面板的按钮样式,配合 extrasBtn 一起使用,若 extrasBtn 参数内 normalImg 属性不传则此参数可不传
                extras : {
                       titleSize : 10,
                       titleColor : '#a3a3a3',
                       //数组类型;附加功能按钮的样式
                       btns : [{
                               title : '图片',
                               //(可选项)字符串类型;按钮常态的背景图片
                               normalImg: BASE_CHATBOX_PATH + '/chatBox_album1.png',
                               //(可选项)字符串类型;按钮按下时的背景图片
                               activeImg: BASE_CHATBOX_PATH + '/chatBox_album2.png'
                       }, {
                               title : '拍照',
                               normalImg: BASE_CHATBOX_PATH + '/chatBox_cam1.png',
                               activeImg: BASE_CHATBOX_PATH + '/chatBox_cam2.png'
                       }]
                }
        }, function(ret, err) {
                //字符串类型;回调的事件类型,
                //取值范围:
                //show(该模块打开成功)
                //send(用户点击发送按钮)
                //clickExtras(用户点击附加功能面板内的按钮)
                //数字类型;当 eventType 为 clickExtras 时,此参数为用户点击附加功能按钮的索引,否则为 undefined
                //字符串类型;当 eventType 为 send 时,此参数返回输入框的内容,否则返回 undefined

                //点击附加功能面板
                if(ret.eventType == 'clickExtras') {
                       var c_index = ret.index;
                       switch(c_index) {
                               case 0:
                                      //                                      api.confirm({
                                      //                                             title : "提示",
                                      //                                             msg : "您想要从哪里选取图片 ?",
                                      //                                             buttons : ["现在照", "相册选", "取消"]
                                      //                                      }, function(ret, err) {
                                      //                                             //定义图片来源类型
                                      //                                             var sourceType;
                                      //                                             if (1 == ret.buttonIndex) {/* 打开相机*/
                                      //                                                     sourceType = "camera";
                                      //                                             } else if (2 == ret.buttonIndex) {
                                      //                                                     sourceType = "album";
                                      //                                             } else {
                                      //                                                     return;
                                      //                                             }
                                      //相册选
                                      getPicture("album");
                                      //                                      });
                                      break;
                               case 1:
                                      //现在照
                                      getPicture("camera");
                                      break;
                       }

                }
                //点击发送按钮
                if(ret.eventType == 'send') {
                       /*
                        *1.用户输入文字或表情
                        */
                       /*用户输入表情或文字*/
                       /*使用读文件方法,读json*/
                       var sendMsg = transText(ret.msg);
                       if ($api.trimAll(sendMsg).length != 0) {
                               //发送消息的函数,后面会有介绍
                               //发送消息
                               //                              chat(sendMsg);
                              api.execScript({
                                      name : '',
                                      frameName : 'hh_chat_frame',
                                      script : 'sendText("' + sendMsg + '","' +conver_type + '")'
                               });
                               /*将文字中的表情符号翻译成图片,并可自定义图片尺寸*/
                               functiontransText(text, imgWidth, imgHeight) {
                                      var imgWidth = imgWidth || 30;
                                      var imgHeight = imgHeight || 30;
                                      var regx = /\[(.*?)\]/gm;
                                      var textTransed = text.replace(regx, function(match) {
                                              var imgSrc =emotionData[match];
                                              if (!imgSrc) {
                                                     //说明不对应任何表情,直接返回
                                                     return match;
                                              }
                                              var img ="<img src=" + imgSrc + " width=" + imgWidth + "height=" + imgHeight + ">";
                                              return img;
                                      });
                                      textTransed = transferBr(textTransed);
                                      return textTransed;
                               }

                       } else {
                               //为ipad写的
                              api.toast({
                                      msg : '对不起,消息不能为空',
                                      duration : 2000,
                                      location : "middle"
                               });
                       }

                }
        });

        //加载录音按钮事件
        /**
         press(按下录音按钮)
         press_cancel(松开录音按钮)
         move_out(按下录音按钮后,从按钮移出)
         move_out_cancel(按下录音按钮后,从按钮移出并松开按钮)
         move_in(move_out事件后,重新移入按钮区域)
         */
        chatBox.addEventListener({
                target :'recordBtn',
                name :'press'
        }, function(ret, err) {
                //开始录音
               startRecord();
        });
        //(松开录音按钮)
        chatBox.addEventListener({
                target :'recordBtn',
                name :'press_cancel'
        }, function(ret, err) {
               setTimeout(function() {
                       stopRecord();
                }, 1000);
               
        });
        //move_out(按下录音按钮后,从按钮移出)
        chatBox.addEventListener({
                target :'recordBtn',
                name :'move_out'
        }, function(ret, err) {
               api.execScript({
                       name : '',
                       frameName : 'hh_voice_window',
                       script : 'moveOut()'
                });
        });
        //move_out_cancel(按下录音按钮后,从按钮移出并松开按钮)
        chatBox.addEventListener({
                target :'recordBtn',
                name :'move_out_cancel'
        }, function(ret, err) {
                api.stopRecord(function(ret,err) {
                       if (ret) {
                              removefile(ret.path);
                       }
                });
               api.closeFrame({
                       name : 'hh_voice_window'
                });
        });
        //move_in(move_out事件后,重新移入按钮区域)
        chatBox.addEventListener({
                target :'recordBtn',
                name :'move_in'
        }, function(ret, err) {
               api.execScript({
                       name : '',
                       frameName : 'hh_voice_window',
                       script : 'moveIn()'
                });
        });
        //输入框绑定
        /**
         *
         move(输入框所在区域弹动事件)
         change(输入框所在区域高度改变)
         showRecord(用户点击左侧语音按钮)
         showEmotion(用户点击表情按钮)
         showExtras(用户点击右侧附加功能按钮,如果 open 时传了 extras 参数才会有此回调)

         */
        //move(输入框所在区域弹动事件)  就是输入框收起和弹出变化
        chatBox.addEventListener({
                target :'inputBar',
                name : 'move'
        }, function(ret, err) {
                //                api.toast({msg: JSON.stringify(ret),location: 'top'}); //50
                //                          api.toast({msg: JSON.stringify(err),location:'middle'}); //283
                //点击输入框时会话界面高度发生变化
               setChatFrameByInputMove(ret.inputBarHeight, ret.panelHeight);
        });

        //change(输入框所在区域高度改变)
        chatBox.addEventListener({
                target :'inputBar',
                name :'change'
        }, function(ret, err) {
                //                api.toast({msg: JSON.stringify(ret),location: 'top'}); //50
                //                          api.toast({msg: JSON.stringify(err),location:'middle'}); //283
                //点击输入框时会话界面高度发生变化
               setChatFrameByInputChange(ret.inputBarHeight, ret.panelHeight);
        });
}

/**
*发送消息
* 周枫
* 2015.08.08
* @param {Object} sendMsg
*/
//function chat(sendMsg) {
//        //向会话列表页发送消息事件
//        api.sendEvent({
//                name :'sendMessage',
//                extra : {
//                       type : 'text',
//                       targetId : '' + target_id + '',
//                       content : sendMsg,
//                       conversationType : 'PRIVATE',
//                       extra : ''
//                }
//        })
//}

/**
* 删除文件
* 周枫
* 2015.08.10
* @param {Object} path
*/
function removefile(path) {
        var fs = api.require('fs');
        fs.remove({
                path : path
        }, function(ret, err) {
                if(ret.status != true) {
                       //                       api.alert({
                       //                              msg : err.msg
                       //                       }, function(ret, err){
                       //                              //coding...
                       //                       });
                }
        });
}

/**
*开始录音
* 周枫
* 2015.08.10
*/
function startRecord() {
        //先删除再录音
        api.stopRecord(function(ret, err) {
                if (ret) {
                       removefile(ret.path);
                }
        });
        api.openFrame({
                name :'hh_voice_window',
                url :'../../html/huihua/hh_voice_window.html',
                scrollToTop :true,
                rect : {
                       x : 0,
                       y : 0,
                       w : api.winWidth,
                       h : api.winHeight - 50,
                },
        });
        //点击后播放开启录音的声音
        api.startPlay({
                path :'widget://res/LowBattery.mp3'
        }, function() {
               api.startRecord();
        });
}

/**
* 结束录音
* path:'',              //字符串,返回的音频地址
duration:0            //数字类型,音频的时长
* 周枫
* 2015.08.10
*/
function stopRecord() {
        api.stopRecord(function(ret, err) {
                if (ret) {
                       if (ret.duration == 0 || ret.duration < 1) {
                              api.execScript({
                                      name : '',
                                      frameName : 'hh_voice_window',
                                      script : 'moveShort()'
                               });
                              removefile(ret.path);
                       } else if (ret.duration > 60) {
                              api.execScript({
                                      name : '',
                                      frameName : 'hh_voice_window',
                                      script : 'moveLong()'
                               });
                              removefile(ret.path);
                       } else {
                              api.sendEvent({
                                      name : 'setVoice',
                                      extra : {
                                              voice_result : ret,
                                              conver_type :conver_type
                                      }
                               });
                       }
                       setTimeout("api.closeFrame({name:'hh_voice_window'})", 400);
                } else {
                       api.execScript({
                               name :'',
                               frameName: 'hh_voice_window',
                               script :'moveShort()'
                       });
                       setTimeout("api.closeFrame({name:'hh_voice_window'})", 400);
                }
        });
}

/**
* 点击输入框时会话界面高度发生变化
*  inputBarHeight: 50,    //数字类型;输入框及左右按钮整体区域的高度,仅当监听 inputBar 的 move 和change 事件时本参数有值
panelHeight: 300       //数字类型;输入框下边缘距离屏幕底部的高度,仅当监听 inputBar 的 move 和change 事件时本参数有值
* 周枫
* 2015.08.10
*/
function setChatFrameByInputMove(inputBarHeight, panelHeight) {
        if (inputBarHeight > 0) {//输入框打开时
               api.setFrameAttr({
                       name : 'hh_chat_frame',
                       rect : {
                               x : 0,
                               y : header_h,
                               w :api.winWidth,
                               h :api.winHeight - header_h - inputBarHeight - panelHeight - 35,
                       },
                });
        } else {//关闭时
               api.setFrameAttr({
                       name : 'chatFrame',
                       rect : {
                               x : 0,
                               y :header_h,
                               w :api.winWidth,
                               h :api.winHeight - header_h - inputBarHeight - 35,
                       },
                });
        }
        setTimeout('setBottom()', 200);
}

/**
* 输入框内文字行数,现设置为最多4行
*  inputBarHeight: 50,    //数字类型;输入框及左右按钮整体区域的高度,仅当监听 inputBar 的 move 和change 事件时本参数有值
panelHeight: 300       //数字类型;输入框下边缘距离屏幕底部的高度,仅当监听 inputBar 的 move 和change 事件时本参数有值
* 周枫
* 2015.08.10
*/
function setChatFrameByInputChange(inputBarHeight, panelHeight) {
        api.setFrameAttr({
                name :'hh_chat_frame',
                rect : {
                       x : 0,
                       y : header_h,
                       w : api.winWidth,
                       h : api.winHeight - header_h - inputBarHeight -panelHeight - 35,
                },
        });
        setTimeout('setBottom()', 200);
}

function setBottom() {
        api.execScript({
                name : '',
                frameName :'hh_chat_frame',
                script :'goBottom()'
        });
}

/**
*  通过系统相册或拍照获取图片和视频
sourceType:(可选项)图片源类型,从相册、图片库或相机获取图片,  library:图片库,camera:相机,album:相册
encodingType:(可选项)返回图片类型,jpg或png,默认值:png
mediaValue:(可选项)媒体类型,图片或视频 ,pic:图片,video:视频
destinationType:(可选项)返回数据类型,指定返回图片地址或图片经过base64编码后的字符串
allowEdit:(可选项)是否可以选择图片后进行编辑,只支持iOS,默认值:false
quality:(可选项)图片质量,只针对jpg格式图片(0-100整数),默认值:50
targetWidth:(可选项)压缩后的图片宽度,图片会按比例适配此宽度,默认值:原图宽度
targetHeight:(可选项)压缩后的图片高度,图片会按比例适配此高度,默认值:原图高度
saveToPhotoAlbum:(可选项)拍照或录制视频后是否保存到相册,默认值:false
callback
{
data:"",               //图片路径
base64Data:"",          //base64数据,destinationType为base64时返回
duration:0              //视频时长(数字类型)
}
* 通过系统相册或拍照获取图片和视频
* 周枫
* 2015.08.11
* @param {Object} sourceType
*/
function getPicture(sourceType) {
        switch(sourceType) {
                case'camera':
                       //获取一张图片
                       api.getPicture({
                              sourceType : sourceType,
                              encodingType : 'png',
                              mediaValue : 'pic',
                               allowEdit: false,
                               quality :80,
                               //               targetWidth : 100,
                               //               targetHeight : 1280,
                              saveToPhotoAlbum : true
                       }, function(ret, err) {
                               if (ret){
                                      var imgSrc = ret.data;
                                      if (imgSrc != "") {
                                              api.sendEvent({
                                                     name : 'setPicurl',
                                                     extra : {
                                                             imgSrc : imgSrc,
                                                             pic_source : 'camera',
                                                             conver_type : conver_type
                                                     }
                                              });
                                      }
                                      //                                      sendPic(imgSrc);
                               }
                       });
                       break;
                case 'album':
                       //UIMediaScanner 是一个多媒体扫描器,可扫描系统的图片、视频等多媒体资源
                       var obj = api.require('UIMediaScanner');
                       obj.open({
                               //返回的资源种类,picture(图片),video(视频),all(图片和视频)
                               type :'picture',
                               //(可选项)图片显示的列数,须大于1
                               column :4,
                               max : 4,
                               //(可选项)图片排序方式,asc(旧->新),desc(新->旧)
                               sort : {
                                      key : 'time',
                                      order : 'desc'
                               },
                               //(可选项)模块各部分的文字内容
                               texts : {
                                      stateText : '已选择*项',
                                      cancelText : '取消',
                                      finishText : '完成'
                               },
                               styles :{
                                      bg : '#fff',
                                      mark : {
                                              icon : '',
                                              position :'bottom_right',
                                              size : 20
                                      },
                                      nav : {
                                              bg : '#eee',
                                              stateColor : '#000',
                                              stateSize : 18,
                                              cancleBg :'rgba(0,0,0,0)',
                                              cancelColor : '#000',
                                              cancelSize : 18,
                                              finishBg :'rgba(0,0,0,0)',
                                              finishColor : '#000',
                                              finishSize : 18
                                      }
                               }
                       }, function(ret) {
                              //callback
                               // list:[{                   //数组类型;返回选定的资源信息数组
                               //path:'',                   //字符串类型;资源路径,返回资源在本地的绝对路径
                              //thumbPath: '',              //字符串类型;缩略图路径,返回资源在本地的绝对路径
                               //suffix:'',                 //字符串类型;文件后缀名,如:png,jpg,mp4
                               //size:1048576,               //数字类型;资源大小,单位(Bytes)
                               //time:'2015-06-29 15:49'     //字符串类型;资源创建时间,格式:yyyy-MM-dd HH:mm:ss
                               //}]
                               if (ret){
                                      if (getJsonObjLength(ret.list) != 0) {
                                              api.sendEvent({
                                                     name : 'setPicurl',
                                                     extra : {
                                                             image_list : ret.list,
                                                             pic_source : 'album',
                                                             conver_type : conver_type
                                                     }
                                              });
                                      }
                               }
                       });
                       break;
        }

}

/**
* 根据群组id获取群组信息页面
* 周枫
* 2015.09.11
*/
function showGroupListById() {
        var group_list_sto =$api.getStorage('group_list_data');
        if ( typeof (group_list_sto) !='undefined') {
                api.openWin({
                       name : 'hh_group_window',
                       url : 'hh_group_window.html',
                       bounces : true,
                       delay : 300,
                       animation : {
                               duration: 400
                       },
                       scrollToTop : true,
                       pageParam : {
                              'targetId' : target_id,
                              'header_h' : header_h,
                               'group_list': group_list_sto,
                              'group_name' : person_name
                       }
                });
        } else {
               getGroupListById(function(target_id, group_list) {
                       api.openWin({
                               name :'hh_group_window',
                               url :'hh_group_window.html',
                               bounces :true,
                               delay :300,
                               animation: {
                                      duration : 400
                               },
                              scrollToTop : true,
                               pageParam: {
                                      'targetId' : target_id,
                                      'header_h' : header_h,
                                      'group_list' : group_list,
                                      'group_name' : person_name
                               }
                       });
                });
        }

}

function initHeaer() {
        //如果是群组会话,则显示右上角群组成员
        if (conver_type == 'GROUP') {
               $api.css($api.byId('menu'), 'display:inline;');
        }
        $api.html($api.byId('mTitle'),person_name);
}

hh_chat_frame.js(会话内容页面,frame)
//最后一条消息的 Id,获取此消息之前的 count 条消息,没有消息第一次调用应设置为: -1
var old_msg_id;
//定义发送人
var target_id;

var conver_type;
//头像
var avatar_url;
var fs_img;
var header_h;
//第一次进入时置底部
var is_fir = true;
apiready = function() {
        api.showProgress({
                title : '加载中...',
                modal : false
        });
        //当前target_id的历史聊天记录
//        var historyMessages =api.pageParam.historyMessages;
        target_id = api.pageParam.target_id;
        old_msg_id = api.pageParam.old_msg_id;
        conver_type = api.pageParam.conver_type;
        avatar_url = api.pageParam.avatar_url;
        header_h = api.pageParam.header_h;
        fs_img = api.require('fs');
        //页面加载时获取历史信息
        setTimeout('initGetHistory("' + target_id+ '", "' + -1 + '", "' + conver_type + '", ' + 10 +')', '200');
        setTimeout('goBottom()', 500);
        //监听收到新消息写入
        api.addEventListener({
                name :'getNewMessage'
        }, function(ret) {
                //               api.alert({
                //                      msg : JSON.stringify(ret)
                //     },function(ret,err){
                //             //coding...
                //     });
                if (ret&& ret.value) {
                       //监听成功
                       var newMessageData = ret.value;
                       //                                             api.alert({
                       //                                                     msg : JSON.stringify(newMessageData)
                       //                                             });
                       //                                             api.alert({msg:newMessageData.data.objectName });
                       //根据targetId和当前会话用户id判断一下,如果相等则写入
                       if (newMessageData.data.targetId == target_id){
                               //获取会话列表页数据
                               //                              var hh_index_list =$api.getStorage('hh_index_list');
                               //会话头像
                               varreceive_img;
                               varmes_type = newMessageData.data.conversationType;
                              switch(mes_type) {
                                      case 'PRIVATE':
                                              receive_img =avatar_url;
                                             switch(newMessageData.data.objectName) {
                                                     case 'RC:TxtMsg':
                                                            $api.append($api.byId("message-content"), '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +receive_img + '"></div><divclass="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' +newMessageData.data.content.text + '</span></div></div>');
                                                             break;
                                                     case 'RC:ImgMsg':
                                                            $api.append($api.byId("message-content"), '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgsrc="' + receive_img + '"></div><divclass="aui-chat-receiver-img"><divclass="aui-chat-left-triangle"></div><span><img  class="pic_thumb" src="' +newMessageData.data.content.thumbPath + '"onerror="this.src=\'../../image/chatBox/hh_defalut.png\'"></span></div></div>');
                                                             break;
                                                     case 'RC:VcMsg':
                                                             //                                                                                   alert('11111111111111111' +JSON.stringify(newMessageData));
                                                             var con = "";
                                                             con += '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +receive_img + '"></div><divclass="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span><imgid="voice_' + newMessageData.data.messageId + '" alt="97"src="../../image/chatBox/mrecelog.png" width="40px"height="30px"/>' + newMessageData.data.content.duration +'\'\'</span></div></div>';
                                                             //                                     alert(con);
                                                            $api.append($api.byId("message-content"), con);
                                                             break;
                                              }
                                              break;
                                      case 'SYSTEM':
                                              receive_img =avatar_url;
                                              $api.append($api.byId("message-content"),'<div class="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +receive_img + '"></div><divclass="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' +newMessageData.data.content.text + '</span></div></div>');
                                              break;
                                      case 'GROUP':
                                              //获取头像和说话人姓名
                                              var group_data =$api.getStorage('group_list_data');
                                              var sender_name = '';
                                              if ( typeof(group_data) != 'undefined') {
                                                     group_data_list = group_data.list;
                                                     for (var i = 0; i < getJsonObjLength(group_data_list);i++) {
                                                             if(newMessageData.data.senderUserId == group_data_list.login_name) {
                                                                    sender_name = group_data_list.person_name;
                                                                    receive_img = group_data_list.head_img;
                                                                    break;
                                                             }
                                                     }
                                              }
                                             switch(newMessageData.data.objectName) {
                                                     case 'RC:TxtMsg':
                                                            $api.append($api.byId("message-content"), '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +receive_img + '"></div><div class="aui-chat-receiver-title"><em>'+ sender_name + '</em></div><divclass="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' +newMessageData.data.content.text + '</span></div></div>');
                                                             break;
                                                     case 'RC:ImgMsg':
                                                            $api.append($api.byId("message-content"), '<divclass="aui-chat-receiver"><div class="aui-chat-receiver-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +receive_img + '"></div><divclass="aui-chat-receiver-title"><em>' + sender_name +'</em></div><div class="aui-chat-receiver-img"><divclass="aui-chat-left-triangle"></div><span><img  class="pic_thumb" src="' +newMessageData.data.content.thumbPath + '"onerror="this.src=\'../../image/chatBox/hh_defalut.png\'"></span></div></div>');
                                                             break;
                                                     case 'RC:VcMsg':
                                                             //                                                                                   alert('11111111111111111' +JSON.stringify(newMessageData));
                                                             var con = "";
                                                             con += '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +receive_img + '"></div><divclass="aui-chat-receiver-title"><em>' + sender_name + '</em></div><divclass="aui-chat-receiver-cont"><div class="aui-chat-left-triangle"></div><span><imgid="voice_' + newMessageData.data.messageId + '" alt="97"src="../../image/chatBox/mrecelog.png" width="40px"height="30px"/>' + newMessageData.data.content.duration +'\'\'</span></div></div>';
                                                             //                                     alert(con);
                                                            $api.append($api.byId("message-content"), con);
                                                             break;
                                              }
                                              break;
                               }

                               //                              if (mes_type =="RIVATE") {
                               //                                     receive_img = avatar_url;
                               //                              }
                               //                              if (mes_type =="SYSTEM") {
                               //                                     receive_img = avatar_url;
                               //                              }
                               //                              //如果是群组则显示发送人姓名
                               //                              if (mes_type =="GROUP") {
                               //                                     for (var i = 0; i < hh_index_list.length; i++) {
                               //                                             if ((newMessageData.data.targetId== target_id) && (hh_index_list.targetId == newMessageData.data.senderUserId)){
                               //                                                    receive_img = hh_index_list.avatar_url;
                               //                                                    break;
                               //                                             }
                               //                                             if ((newMessageData.data.targetId== target_id) && (hh_index_list.targetId != newMessageData.data.senderUserId)){
                               //                                                    receive_img = BASE_RECEIVER_DEFAULT_IMG;
                               //                                             }
                               //                                     }
                               //                                     var group_data = $api.getStorage('group_data');
                               //                                     //                                      api.alert({
                               //                                     //                                              msg :newMessageData.data.senderUserId + ',' + JSON.stringify(group_data)
                               //                                     //                 },function(ret,err){
                               //                                     //                         //coding...
                               //                                     //                 });
                               //                                     var sender_name = group_data[newMessageData.data.senderUserId];
                               //                                     switch(newMessageData.data.objectName) {
                               //                                             case 'RC:TxtMsg':
                               //                                                    $api.append($api.byId("message-content"), '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><img src="' + receive_img+ '"></div><div class="aui-chat-receiver-title"><em>'+ sender_name + '</em></div><divclass="aui-chat-receiver-cont"><div class="aui-chat-left-triangle"></div><span>'+ newMessageData.data.content.text + '</span></div></div>');
                               //                                                    break;
                               //                                             case 'RC:ImgMsg':
                               //                                                    $api.append($api.byId("message-content"), '<divclass="aui-chat-receiver"><div class="aui-chat-receiver-avatar"><imgsrc="' + receive_img + '"></div><divclass="aui-chat-receiver-title"><em>' + sender_name +'</em></div><divclass="aui-chat-receiver-img"><divclass="aui-chat-left-triangle"></div><span><imgclass="pic_thumb" src="' +newMessageData.data.content.thumbPath +'"></span></div></div>');
                               //                                                    break;
                               //                                             case 'RC:VcMsg':
                               //                                                    //                                                                                   alert('11111111111111111' + JSON.stringify(newMessageData));
                               //                                                    var con = "";
                               //                                                    con += '<divclass="aui-chat-receiver"><div class="aui-chat-receiver-avatar"><imgsrc="' + receive_img + '"></div><divclass="aui-chat-receiver-title"><em>' + sender_name +'</em></div><div class="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' +newMessageData.data.content.duration + '\'\'<img id="voice_' +newMessageData.data.messageId + '" alt="97"src="../../image/chatBox/mrecelog.png" width="40px"height="30px"/></span></div></div>';
                               //                                                    //                                      alert(con);
                               //                                                    $api.append($api.byId("message-content"), con);
                               //                                                    break;
                               //                                     }
                               //                              } else {
                               //                                     switch(newMessageData.data.objectName) {
                               //                                             case 'RC:TxtMsg':
                               //                                                    $api.append($api.byId("message-content"), '<divclass="aui-chat-receiver"><div class="aui-chat-receiver-avatar"><imgsrc="' + receive_img + '"></div><div class="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' +newMessageData.data.content.text + '</span></div></div>');
                               //                                                    break;
                               //                                             case 'RC:ImgMsg':
                               //                                                    $api.append($api.byId("message-content"), '<divclass="aui-chat-receiver"><div class="aui-chat-receiver-avatar"><imgsrc="' + receive_img + '"></div><divclass="aui-chat-receiver-img"><divclass="aui-chat-left-triangle"></div><span><imgclass="pic_thumb" src="' + newMessageData.data.content.thumbPath+ '"></span></div></div>');
                               //                                                    break;
                               //                                             case 'RC:VcMsg':
                               //                                                    //                                                                                   alert('11111111111111111' + JSON.stringify(newMessageData));
                               //                                                    var con = "";
                               //                                                    con += '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><img src="' + receive_img+ '"></div><divclass="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' +newMessageData.data.content.duration + '\'\'<img id="voice_' + newMessageData.data.messageId+ '" alt="97" src="../../image/chatBox/mrecelog.png"width="40px" height="30px"/></span></div></div>';
                               //                                                    //                                      alert(con);
                               //                                                    $api.append($api.byId("message-content"), con);
                               //                                                    break;
                               //                                     }
                               //                              }
                              goBottom();
                       }
                }

        });

        //监听发送新消息写入,这个事件主要来处理发送消息插入到会话窗口中
        api.addEventListener({
                name :'insertSendMessage'
        }, function(ret) {
                if (ret&& ret.value) {
                       var newMessageData = ret.value;
                       //我的头像
                       var sender_img = $api.getStorage('avatar_url');
                       var status_msg_id =newMessageData.data.message.messageId;
                       //                                                                    alert(JSON.stringify(newMessageData));
                       //RC:TxtMsg:文本消息,RC:VcMsg:语音消息,RC:ImgMsg:图片消息,RCBSMsg:位置消息
                       switch (newMessageData.data.message.objectName){
                               case'RC:TxtMsg':
                                      //页面写入发送消息
                                      $api.append($api.byId("message-content"),'<div class="aui-chat-sender"><divclass="aui-chat-sender-avatar"><imgsrc="' + sender_img + '"></div><divclass="aui-chat-sender-cont"><divclass="aui-chat-right-triangle"></div><span>' +newMessageData.data.message.content.text + '</span></div><imgid="status_' + status_msg_id + '" class="send_loading"src="../../image/loading_more.gif"/></div>');
                                      break;
                               case'RC:ImgMsg':
                                      //                                      if (api.systemType == 'ios') {
                                      $api.append($api.byId("message-content"),'<div class="aui-chat-sender"><divclass="aui-chat-sender-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +sender_img + '"></div><divclass="aui-chat-sender-img"><divclass="aui-chat-right-triangle"></div><span><img  class="pic_thumb" src="' +newMessageData.data.message.content.thumbPath +'"></span></div><img id="status_' + status_msg_id +'" class="send_loading"src="../../image/loading_more.gif"/></div>');
                                      //                                      }
                                      //                                      else if (api.systemType =='android') {
                                      //                                             $api.append($api.byId("message-content"), '<divclass="aui-chat-sender"><div class="aui-chat-sender-avatar"><imgsrc="' + sender_img + '"></div><divclass="aui-chat-sender-img"><divclass="aui-chat-right-triangle"></div><span><imgclass="pic_thumb" src="' + newMessageData.data.message.content.thumbPath +'"></span></div></div>');
                                      //                                      }

                                      break;
                               case'RC:VcMsg':
                                      var con = "";
                                      con += '<divclass="aui-chat-sender"><div class="aui-chat-sender-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +sender_img + '"></div><div class="aui-chat-sender-cont"><divclass="aui-chat-right-triangle"></div><span>' +newMessageData.data.message.content.duration + '\'\'<img id="voice_' +newMessageData.data.message.messageId + '" alt="98"src="../../image/chatBox/msendlog.png" width="40px"height="30px"/></span></div><img id="status_' +status_msg_id + '" class="send_loading" src="../../image/loading_more.gif"/></div>';
                                      $api.append($api.byId("message-content"), con);
                                      break;
                       }

                }
                goBottom();
        });
        //绑定下拉刷新历史会话事件
        api.setRefreshHeaderInfo({
                visible :true,
                loadingImg :'widget://image/local_icon_refresh.png',
                bgColor :'#F5F5F5',
                textColor :'#8E8E8E',
                textDown : '下拉加载更多...',
                textUp : '松开加载...',
                showTime :true
        }, function(ret, err) {
                //从服务器加载数据,完成后调用api.refreshHeaderLoadDone()方法恢复组件到默认状态
                //调用获取历史会话监听
               initGetHistory(target_id, old_msg_id, conver_type, 20);
        });
        //获取历史会话监听,渲染页面
        api.addEventListener({
                name :'setHistory'
        }, function(ret) {
                //                              api.alert({
                //                                     msg:'333:'+JSON.stringify(ret)
                //                    },function(ret,err){
                //                            //coding...
                //                    });
                if (ret&& ret.value) {
                       var historyMessages = ret.value.data;
                       //                       api.alert({
                       //                              msg:JSON.stringify(historyMessages)
                       //         },function(ret,err){
                       //                 //coding...
                       //          });
                       if (historyMessages != '') {
                               var con ='';
                               //倒叙循环会话记录
                               for (vari = getJsonObjLength(historyMessages) - 1; i >= 0; i--) {
                                      var targetid = historyMessages.targetId;
                                      var content = '';
                                      //文字还是图片还是声音 RC:TxtMsg:文本消息,RC:VcMsg:语音消息,RC:ImgMsg:图片消息,RCBSMsg:位置消息
                                      var type = historyMessages.objectName;
                                      //SEND 还是 RECEVIE
                                      var dir = historyMessages.messageDirection;
                                      var start = historyMessages.sentTime;
                                      //                                      var end = new Date();
                                      var g_time = new getTimeTemplate();

                                      //我的头像
                                      var sender_img = $api.getStorage('avatar_url');
                                      //计算会话时间
                                      if (i == historyMessages.length - 1) {
                                              con += '<divclass="aui-chat-sender history-date"><p>' +g_time.getTime(start, 1) + '</p></div>';
                                      } else {
                                              var M1 =historyMessages.sentTime;
                                              var M2 =historyMessages[i + 1].sentTime;
                                              if ((M1 - M2) >=180 * 1000) {
                                                     con += '<div class="aui-chat-senderhistory-date"><p>' + g_time.getTime(start, 1) +'</p></div>';
                                              }
                                      }
                                      //加载会话内容
                                      if (dir == 'SEND') {
                                              switch(type) {
                                                     case 'RC:TxtMsg':
                                                             con += '<divclass="aui-chat-sender"><divclass="aui-chat-sender-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +sender_img + '"></div><divclass="aui-chat-sender-cont"><divclass="aui-chat-right-triangle"></div><span>' +historyMessages.content.text + '</span></div></div>';
                                                             break;
                                                     case 'RC:VcMsg':
                                                             con += '<divclass="aui-chat-sender"><divclass="aui-chat-sender-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +sender_img + '"></div><divclass="aui-chat-sender-cont"><divclass="aui-chat-right-triangle"></div><span>' +historyMessages.content.duration + '\'\'<img id="voice_' +historyMessages.messageId + '" alt="98"src="../../image/chatBox/msendlog.png" width="40px"height="30px"/></span></div></div>';
                                                             break;
                                                     case 'RC:ImgMsg':
                                                             con += '<divclass="aui-chat-sender"><divclass="aui-chat-sender-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +sender_img + '"></div><divclass="aui-chat-sender-img"><divclass="aui-chat-right-triangle"></div><span><img  class="pic_thumb" src="' +historyMessages.content.thumbPath + '"></span></div></div>'
                                                             break;
                                              }

                                              //渲染发送会话
                                              //                                      $api.prepend($api.byId("message-content"),'<div class="aui-chat-sender"><divclass="aui-chat-sender-avatar"><imgsrc="../../image/person/demo2.png"></div><divclass="aui-chat-sender-cont"><divclass="aui-chat-right-triangle"></div><span>' +historyMessages.content.text + '</span></div></div>');
                                      } else {
                                              //获取会话列表页数据
                                              //                                             var hh_index_list =$api.getStorage('hh_index_list');
                                              //会话头像
                                              var receive_img;
                                              var mes_type =historyMessages.conversationType;
                                              //                                             api.alert({
                                              //                                                     msg :JSON.stringify(historyMessages)
                                              //                    },function(ret,err){
                                              //                            //coding...
                                              //                     });
                                              switch(mes_type) {
                                                     case 'PRIVATE':
                                                             receive_img = avatar_url;
                                                             switch(type) {
                                                                    case 'RC:TxtMsg':
                                                                            con += '<div class="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +receive_img + '"></div><div class="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' +historyMessages.content.text + '</span></div></div>';
                                                                            break;
                                                                    case 'RC:VcMsg':
                                                                            con += '<divclass="aui-chat-receiver"><div class="aui-chat-receiver-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +receive_img + '"></div><divclass="aui-chat-receiver-cont"><div class="aui-chat-left-triangle"></div><span><imgid="voice_' + historyMessages.messageId + '" alt="97"src="../../image/chatBox/mrecelog.png" width="40px"height="30px"/>' + historyMessages.content.duration +'\'\'</span></div></div>';
                                                                            break;
                                                                    case 'RC:ImgMsg':
                                                                            con += '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +receive_img + '"></div><divclass="aui-chat-receiver-img"><divclass="aui-chat-left-triangle"></div><span><imgclass="pic_thumb"   onclick="openImage(\'' +historyMessages.content.imageUrl + '\')" src="' +historyMessages.content.thumbPath + '"></span></div></div>'
                                                                            break;

                                                                    //渲染接收会话
                                                                    //                                      $api.prepend($api.byId("message-content"),'<div class="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgsrc="../../image/person/demo2.png"></div><divclass="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' +historyMessages.content.text + '</span></div></div>');
                                                             }
                                                             break;
                                                     case 'SYSTEM':
                                                             receive_img = avatar_url;
                                                             con += '<div class="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +receive_img + '"></div><divclass="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' +historyMessages.content.text + '</span></div></div>';
                                                             break;
                                                     case 'GROUP':
                                                             //获取头像和说话人姓名
                                                             var group_data =$api.getStorage('group_list_data');
                                                             var sender_name = '';
                                                             if ( typeof (group_data) !='undefined') {
                                                                    group_data_list = group_data.list;
                                                                    for (var j = 0; j < getJsonObjLength(group_data_list); j++) {
                                                                            if (historyMessages.senderUserId== group_data_list[j].login_name) {
                                                                                   sender_name = group_data_list[j].person_name;
                                                                                   receive_img = group_data_list[j].head_img;
                                                                                    break;
                                                                            }
                                                                    }
                                                             }
                                                             switch(type) {
                                                                    case 'RC:TxtMsg':
                                                                            con += '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +receive_img + '"></div><div class="aui-chat-receiver-title"><em>'+ sender_name + '</em></div><div class="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' +historyMessages.content.text + '</span></div></div>';
                                                                            break;
                                                                    case 'RC:VcMsg':
                                                                            con += '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +receive_img + '"></div><divclass="aui-chat-receiver-title"><em>' + sender_name +'</em></div><divclass="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span><imgid="voice_' + historyMessages.messageId + '" alt="97" src="../../image/chatBox/mrecelog.png"width="40px" height="30px"/>' + historyMessages.content.duration +'\'\'</span></div></div>';
                                                                            break;
                                                                    case 'RC:ImgMsg':
                                                                            con += '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgonerror="this.src=\'../../image/person/default.jpg\'" src="' +receive_img + '"></div><div class="aui-chat-receiver-title"><em>'+ sender_name + '</em></div><div class="aui-chat-receiver-img"><divclass="aui-chat-left-triangle"></div><span><imgclass="pic_thumb"   onclick="openImage(\'' +historyMessages.content.imageUrl + '\')" src="' +historyMessages.content.thumbPath + '"onerror="this.src=\'../../image/chatBox/hh_defalut.png\'"></span></div></div>'
                                                                            break;

                                                                    //渲染接收会话
                                                                    //                                      $api.prepend($api.byId("message-content"),'<div class="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgsrc="../../image/person/demo2.png"></div><divclass="aui-chat-receiver-cont"><div class="aui-chat-left-triangle"></div><span>'+ historyMessages.content.text + '</span></div></div>');
                                                             }
                                                             break;
                                              }

                                              //                                             if (historyMessages.conversationType =="RIVATE") {
                                              //                                                    receive_img = avatar_url;
                                              //                                             }
                                              //                                             if (historyMessages.conversationType =="SYSTEM") {
                                              //                                                    receive_img = avatar_url;
                                              //                                             }
                                              //                                             if (historyMessages.conversationType =="GROUP") {
                                              //                                                     for (varj = 0; j < hh_index_list.length; j++) {
                                              //                                                            if (hh_index_list[j].targetId == historyMessages.senderUserId){
                                              //                                                                    receive_img =hh_index_list[j].avatar_url;
                                              //                                                            } else {
                                              //                                                                    //                                                            receive_img = '../../image/person/demo_m.png';
                                              //                                                                    receive_img =BASE_RECEIVER_DEFAULT_IMG;
                                              //                                                            }
                                              //                                                     }
                                              //                                                     //获取群组人员姓名
                                              //                                                     vargroup_data = $api.getStorage('group_data');
                                              //                                                     varsender_name = group_data[historyMessages.senderUserId];
                                              //                                                    switch(type) {
                                              //                                                            case 'RC:TxtMsg':
                                              //                                                                    con += '<divclass="aui-chat-receiver"><div class="aui-chat-receiver-avatar"><imgsrc="' + receive_img + '"></div><divclass="aui-chat-receiver-title"><em>' + sender_name +'</em></div><divclass="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' +historyMessages.content.text + '</span></div></div>';
                                              //                                                                    break;
                                              //                                                            case 'RC:VcMsg':
                                              //                                                                    con += '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><img src="' + receive_img+ '"></div><divclass="aui-chat-receiver-title"><em>' + sender_name +'</em></div><divclass="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' + historyMessages.content.duration+ '\'\'<img id="voice_' + historyMessages.messageId + '"alt="97" src="../../image/chatBox/mrecelog.png"width="40px" height="30px"/></span></div></div>';
                                              //                                                                    break;
                                              //                                                            case 'RC:ImgMsg':
                                              //                                                                    con += '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><img src="' + receive_img+ '"></div><divclass="aui-chat-receiver-title"><em>' + sender_name +'</em></div><divclass="aui-chat-receiver-img"><divclass="aui-chat-left-triangle"></div><span><imgclass="pic_thumb" src="' +historyMessages.content.thumbPath + '"></span></div></div>'
                                              //                                                                    break;
                                              //
                                              //                                                            //渲染接收会话
                                              //                                                            //                                     $api.prepend($api.byId("message-content"), '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgsrc="../../image/person/demo2.png"></div><divclass="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' +historyMessages.content.text + '</span></div></div>');
                                              //                                                     }
                                              //                                             } else {
                                              //                                                    switch(type) {
                                              //                                                            case 'RC:TxtMsg':
                                              //                                                                    con += '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><img src="' + receive_img+ '"></div><divclass="aui-chat-receiver-cont"><div class="aui-chat-left-triangle"></div><span>'+ historyMessages.content.text + '</span></div></div>';
                                              //                                                                    break;
                                              //                                                            case 'RC:VcMsg':
                                              //                                                                    con += '<divclass="aui-chat-receiver"><div class="aui-chat-receiver-avatar"><imgsrc="' + receive_img + '"></div><divclass="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' +historyMessages.content.duration + '\'\'<img id="voice_' +historyMessages.messageId + '" alt="97"src="../../image/chatBox/mrecelog.png" width="40px"height="30px"/></span></div></div>';
                                              //                                                                    break;
                                              //                                                            case 'RC:ImgMsg':
                                              //                                                                    con += '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><img src="' + receive_img+ '"></div><divclass="aui-chat-receiver-img"><div class="aui-chat-left-triangle"></div><span><imgclass="pic_thumb" src="' +historyMessages.content.thumbPath +'"></span></div></div>'
                                              //                                                                    break;
                                              //
                                              //                                                            //渲染接收会话
                                              //                                                            //                                     $api.prepend($api.byId("message-content"), '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><img src="../../image/person/demo2.png"></div><divclass="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' +historyMessages.content.text + '</span></div></div>');
                                              //                                                     }
                                              //                                             }

                                      }
                                      //获取刷新后最后一条ID
                                      if (i == historyMessages.length - 1) {
                                              old_msg_id =historyMessages.messageId;
                                      }
                               }
                               //                             $api.css($api.byId('hh_update_div'), 'display:none;');
                               //                              api.alert({
                               //                                     msg: con
                               //             },function(ret,err){
                               //                    //coding...
                               //             });
                               //加载历史聊天记录
                               $api.prepend($api.byId("message-content"),con);
                       } else {
                              old_msg_id = 0;
                       }

                }
                //通知顶部下拉刷新数据加载完毕,组件会恢复到默认状态
               api.refreshHeaderLoadDone();
                //隐藏进度提示框
               api.hideProgress();
               
                if(old_msg_id == -1) {
                       goBottom();
                }
                //第一次进入时置底部
                if (is_fir) {
                       goBottom();
                       is_fir = false;
                }
        });

        //       //监听发送新消息写入,这个事件主要来处理发送消息插入到会话窗口中
        //       api.addEventListener({
        //               name : 'insertSendMessage'
        //       }, function(ret) {
        //               if (ret && ret.value) {
        //                       varnewMessageData = ret.value;
        //                       //                      alert(JSON.stringify(newMessageData));
        //                       //页面写入发送消息
        //                      $api.append($api.byId("message-content"), '<divclass="aui-chat-sender"><div class="aui-chat-sender-avatar"><imgsrc="../../image/person/demo2.png"></div><divclass="aui-chat-sender-cont"><div class="aui-chat-right-triangle"></div><span>'+ newMessageData.data.message.content.text +'</span></div></div>');
        //               }
        //       });
        //       //监听收到新消息写入
        //       api.addEventListener({
        //               name : 'getNewMessage'
        //       }, function(ret) {
        //               if (ret && ret.value) {
        //                       //监听成功
        //                       varnewMessageData = ret.value;
        //                       //根据targetId和当前会话用户id判断一下,如果相等则写入
        //                       if(newMessageData.data.targetId == targetId) {
        //                             $api.append($api.byId("message-content"), '<divclass="aui-chat-receiver"><divclass="aui-chat-receiver-avatar"><imgsrc="../../image/person/demo2.png"></div><divclass="aui-chat-receiver-cont"><divclass="aui-chat-left-triangle"></div><span>' +newMessageData.data.content.text + '</span></div></div>');
        //                       }
        //               }
        //       });
        //绑定发送多个图片的监听
        sendPic();
        //发送语音消息
        sendVoi();
        //从后台返回到前台
        reAppFromBack();
        //下拉刷新数据
        //       refreshHeaderInfo();
}
/**
*滚动页面底部
* 周枫
* 2015.08.11
*/
function goBottom() {
       document.getElementsByTagName('body')[0].scrollTop =document.getElementsByTagName('body')[0].scrollHeight;
}

/**
* 发送文本消息
* 周枫
* 2015.08.08
* @param {Object} sendMsg
*/
function sendText(sendMsg, conver_type) {
        //向会话列表页发送消息事件
        api.sendEvent({
                name :'sendMessage',
                extra : {
                       type : 'text',
                       targetId : '' + target_id + '',
                       content : sendMsg,
                       conversationType : conver_type,
                       extra : ''
                }
        })
}

/**
* 发送图片消息
* 周枫
* 2015.08.11
* @param {Object} img_url
*/
function sendPic() {
        api.addEventListener({
                name :'setPicurl'
        }, function(ret) {
                if (ret&& ret.value) {
                       var value = ret.value;
                       //                      alert(JSON.stringify(value));
                       switch(value.pic_source) {
                               case'camera':
                                      //向会话列表页发送消息事件
                                      api.sendEvent({
                                              name : 'sendMessage',
                                              extra : {
                                                     type : 'pic',
                                                     targetId : '' + target_id + '',
                                                     imgSrc : value.imgSrc,
                                                     conversationType : value.conver_type,
                                                     pic_source : value.pic_source,
                                                     extra : ''
                                              }
                                      })
                                      break;
                               case'album':
                                      //向会话列表页发送消息事件
                                      api.sendEvent({
                                              name : 'sendMessage',
                                              extra : {
                                                     type : 'pic',
                                                     targetId : '' + target_id + '',
                                                     img_list : value.image_list,
                                                     conversationType : value.conver_type,
                                                     pic_source : value.pic_source,
                                                     extra : ''
                                              }
                                      })
                                      break;
                       }

                }
        });

}

/**
* 发送语音消息
* 周枫
* 2015.08.12
*/
function sendVoi() {
        api.addEventListener({
                name :'setVoice'
        }, function(ret) {
                if (ret&& ret.value) {
                       var value = ret.value.voice_result;
                       //                                             alert(JSON.stringify(value));
                       //向会话列表页发送消息事件
                       api.sendEvent({
                               name :'sendMessage',
                               extra : {
                                      type : 'voi',
                                      targetId : '' + target_id + '',
                                      voicePath : value.path,
                                      duration : value.duration,
                                      conversationType : ret.value.conver_type,
                                      extra : ''
                               }
                       })
                }
        });
}

/**
* 展示图片
* 周枫
* 2015.08.12
* @param {Object} img_url
*/
function openImage(img_url) {
        //       var file_name = '../../file/hh/' + target_id +'_img_url.text';
        var file_name = 'fs://hh//' + target_id +'_img_url.text';

        var img_obj =api.require('imageBrowser');
        //               fs_img.remove({
        //                   path: file_name
        //               },function(ret,err){
        //                   var status =ret.status;
        //                   if (status) {
        //                      api.alert({msg:'删除文件成功'});
        //                   }else {
        //                      api.alert({msg:err.msg});
        //                   }
        //               });
        var img_urls = new Array();
        var img_data = '';
        //判断是否存在文件
        fs_img.exist({
                path :file_name
        }, function(ret, err) {
                if(ret.exist) {
                       if (ret.directory) {
                              api.alert({
                                      msg : '该路径指向一个文件夹'
                               });
                       } else {
                               //打开文件
                              fs_img.open({
                                      path : file_name,
                                      //文件打开方式,读写
                                      flags : 'read_write'
                               },function(ret, err) {
                                      var fd = ret.fd;
                                      if (ret.status) {
                                              //读取文件内容
                                              fs_img.read({
                                                     fd : fd,
                                                     offset : 0,
                                                     //读取内容长度
                                                     length : 0
                                              }, function(ret, err){
                                                     if (ret.status) {
                                                             //写入图片路径文件的数据
                                                             img_data = ret.data;
                                                             //打开相册的数组
                                                             img_urls = ret.data.split(',');
                                                             //当前图片是否已经存在
                                                             var flag_img = true;
                                                             //相册有几张图片
                                                             var img_urls_l = img_urls.length;
                                                             var img_count = img_urls_l;
                                                             //如果图片已经存在,则不执行下面写入操作
                                                             for (var i = 0; i <img_urls_l; i++) {
                                                                    if (img_url == (img_urls + '')) {
                                                                            flag_img = false;
                                                                            img_count = i;
                                                                    }
                                                             }
                                                             //如果图片不存在,则写入文件
                                                             if (flag_img) {
                                                                    img_data = img_data + ',' + img_url
                                                                     img_urls[img_urls_l]= img_url;

                                                                    //写入文件内容
                                                                    fs_img.write({
                                                                            //open方法得到的文件句柄,不能为空
                                                                            fd : fd,
                                                                            //写入数据
                                                                            data : img_data,
                                                                            //当前文件偏移量,默认值:0
                                                                            offset : 0
                                                                            //codingType 所要阅读的文本的编码格式,取值范围:gbk、utf8 默认值:utf8
                                                                    }, function(ret, err) {
                                                                            if (ret.status) {
                                                                                    //打开相册
                                                                                   img_obj.openImages({
                                                                                           imageUrls : img_urls,
                                                                                           //是否以九宫格方式显示图片
                                                                                           showList : false,
                                                                                           //                                                                                           showList : true,
                                                                                           activeIndex : img_count
                                                                                          
                                                                                    });
                                                                            } else {
                                                                                   api.alert({
                                                                                           msg : '对不起,2再次写入文件失败' + err.msg
                                                                                    });
                                                                            }
                                                                    });
                                                             } else {
                                                                    //打开相册
                                                                    img_obj.openImages({
                                                                            imageUrls : img_urls,
                                                                            //是否以九宫格方式显示图片
                                                                            showList : false,
                                                                            //                                                                           showList : true,
                                                                            activeIndex : img_count
                                                                           
                                                                    });
                                                             }

                                                     } else {
                                                             api.alert({
                                                                    msg : '对不起,再次读取文件失败' + err.msg
                                                             });
                                                     }
                                              });

                                      } else {
                                              api.alert({
                                                     msg : '对不起,再次创建文件失败' + err.msg
                                              });
                                      }
                               });
                       }
                } else {
                       //如果不存在文件,则创建图片路径文件
                       fs_img.createFile({
                               path :file_name
                       }, function(ret, err) {
                               varstatus = ret.status;
                               if(status) {
                                      //打开文件
                                      fs_img.open({
                                              path : file_name,
                                              //文件打开方式,读写
                                              flags : 'read_write'
                                      }, function(ret, err) {

                                              if (ret.status) {
                                                     fs_img.write({
                                                             //open方法得到的文件句柄,不能为空
                                                             fd : ret.fd,
                                                             //写入数据
                                                             data : img_url + '',
                                                             //当前文件偏移量,默认值:0
                                                             offset : 0
                                                             //codingType 所要阅读的文本的编码格式,取值范围:gbk、utf8 默认值:utf8
                                                     }, function(ret, err) {
                                                             if (ret.status) {
                                                                    img_urls[0] = img_url;
                                                                    img_obj.openImages({
                                                                            imageUrls : img_urls,
                                                                            //是否以九宫格方式显示图片
                                                                            showList : false,
                                                                            activeIndex : 0
                                                                           
                                                                    });
                                                             } else {
                                                                    api.alert({
                                                                            msg : '对不起,写入文件失败' + err.msg
                                                                    });
                                                             }
                                                     });
                                              } else {
                                                     api.alert({
                                                             msg : '对不起,打开文件失败' + err.msg
                                                     });
                                              }
                                      });
                               } else {
                                      api.alert({
                                              msg : '对不起,创建文件失败' + err.msg
                                      });
                               }
                       });
                }
        });
        //       var img_urls = new Array();
        //       img_urls[0] = img_url;
        //       api.alert({
        //               msg : img_url
        //  },function(ret,err){
        //         //coding...
        //  });
        //       var obj = api.require('imageBrowser');
        //       obj.openImages({
        //               imageUrls : img_urls,
        //               //是否以九宫格方式显示图片
        //               showList : false,
        //               activeIndex : 0
        //       });
}

/**
* 播放语音
* 周枫
* 2015.08.12
*/
function playVoice(id, voicePath, whosend) {
        var objs =document.getElementsByTagName("img");
        for (var i = 0; i < objs.length; i++){
                if(objs.alt == '98') {
                       objs.src ='../../image/chatBox/msendlog.png';
                } else if(objs.alt == '97') {
                       objs.src = '../../image/chatBox/mrecelog.png';
                }
        }
        api.stopPlay();
        if (whosend == 0) {
               document.getElementById('voice_' + id).src ='../../image/chatBox/msendgif.gif';
        } else {
                document.getElementById('voice_'+ id).src = '../../image/chatBox/mrecegif.gif';
        }
        api.startPlay({
                path :voicePath
        }, function() {
                if (whosend== 0) {
                       document.getElementById('voice_' + id).src ='../../image/chatBox/msendlog.png';
                } else {
                       document.getElementById('voice_' + id).src ='../../image/chatBox/mrecelog.png';
                }
        });
        //       alert(duration+','+voicePath);
}

/**
* 获取历史聊天记录
* 周枫
* 2015.08.20
* @param {Object} target_id 会话人
* @param {Object} old_msg_id 最新会话id
* @param {Object} conver_type 会话类型
* @param {Object} msg_count 获取条数
*/
function initGetHistory(target_id, old_msg_id, conver_type, msg_count) {
        api.sendEvent({
                name :'getHistory',
                extra : {
                       type : conver_type,
                       old_msg_id : old_msg_id,
                       target_id : target_id,
                       msg_count : msg_count
                }
        });
}

/**
* 从后台返回
* 周枫
* 2015.09.02
*/
function reAppFromBack() {
        api.addEventListener({
                name :'resume'
        }, function(ret, err) {
                goBottom();
        });
}

//点击出现气泡按钮功能,暂未实现
//window.addEventListener("touchstart", showBubbleMenu);
//
//function showBubbleMenu(event) {
//        var touch = event.touches[0];
//        var centerX = touch.clientX;
//        var centerY = touch.clientY;
//        var bubbleMenu = api.require('bubbleMenu');
//        var btnArray = [{
//               "title" : "复制"
//        }, {
//               "title" : "删除"
//        }];
//
//        bubbleMenu.open({
//                centerX :centerX,
//                centerY :centerY,
//                btnArray :btnArray,
//                fixedOn :api.frameName
//        }, function(ret, err) {
//                var btn =btnArray[ret.index];
//                api.toast({
//                       msg : '您点击了:' +btn.title + '按钮',
//                       location : 'top'
//                });
//        });
//}

/**
* 打开应用模块
* 周枫
* 2015.11.18
* @param {Object} yy_name
*/
function openYyFun(yy_name) {
        var is_open = false;
        for (var i = 0; i <BASE_YY_OPEN.length; i++) {
                if (yy_name== BASE_YY_OPEN) {
                       is_open = true;
                }
        }

        if (is_open) {
                api.openWin({
                       name : 'yy_name',
                       url : '../../html/yingyong/' + yy_name +'.html',
                       pageParam : {
                               header_h: header_h
                       },
                       scrollToTop : true,
                       bounces : false,
                       showProgress : true,
                       vScrollBarEnabled : false,
                       hScrollBarEnabled : false,
                       slidBackEnabled : false,
                       delay : 300,
                       animation : {
                               duration: 400
                       }
                });
        } else {
                api.alert({
                       msg : '对不起,当前应用尚未开通。'
                },function(ret, err) {
                       //coding...
                });
        }

}

/**
* 清除正在发送图标
* 周枫
* 2015.12.10
* @param {Object} msg_id
*/
function removeload(msg_id) {
        var load = $api.byId('status_' + msg_id);
        $api.remove(load);
}

hh_group_window.js (群组会话时,显示群组信息人员列表页面)
var target_id;
apiready = function() {

        //定位header位置,留出上面电池等空隙,苹果需要
        var header = $api.byId('aui-header');
        $api.fixStatusBar(header);

        target_id = api.pageParam.target_id;
        header_h = api.pageParam.header_h;
        var group_name = api.pageParam.group_name;

        var group_list =api.pageParam.group_list;
        
        //安卓关闭
        if (api.systemType == 'android') {
               backFromChatForAndroid();
        }

        //打开群组内容frame页面
        api.openFrame({
                name : 'hh_group_frame',
                scrollToTop :true,
                url :'../../html/huihua/hh_group_frame.html',
                pageParam : {
                       'target_id' : target_id,
                       'header_h' : header_h,
                       'group_list' : group_list,
                       'group_name' : group_name
                },
                rect : {
                       x : 0,
                       y : header_h,
                       w : api.winWidth,
                       h : api.winHeight - header_h,
                },
                //页面是否弹动为了下拉刷新使用
                bounces :true
        });
}
/**
*返回会话列表页面
* 周枫
* 2015.08.08
*/
function back() {
        api.execScript({
                name :'root',
                frameName :'txl_index',
                script :'showMyself();'
        });
        api.closeWin();

}

/**
* 安卓点击返回的时候
* 周枫
* 2015.08.31
*/
function backFromChatForAndroid() {
        api.addEventListener({
                name :"keyback"
        }, function(ret, err) {
                back();
        });
}

hh_group_frame.js(群组会话时,群组信息frame页面)
var old_msg_id = -1;
var group_list;
var avatar_url;
apiready = function() {
        group_list = api.pageParam.group_list;
        group_name = api.pageParam.group_name;
        $api.html($api.byId('group_name'),group_name);
        loadData();
        //监听来自通讯录页面获取最新会话id的事件
        api.addEventListener({
                name :'setOldMessageId'
        }, function(ret) {
                if (ret&& ret.value) {
                       var value = ret.value;
                       old_msg_id = value.old_msg_id;
                }
        });
}

function loadData(){
        var html_type =template.render('hhgroup_script', group_list);
        document.getElementById('hhgroup_div').innerHTML= html_type;
        //延迟加载图片
        setTimeout(function() {
                echoInit();
        }, 300);
}

function readyHhList(target_id, person_name, conver_type, head_img) {
        api.closeWin({
                name :'hh_chat_window'
    });
//        closeMyself();
        api.sendEvent({
                name :'getOldMessageId',
                extra : {
                       target_id : target_id,
                       conver_type : conver_type,
                       count : 1
                }
        });
        //打开会话页面
        setTimeout('execHhList("' +target_id + '","' + person_name + '","' + conver_type +'","' + head_img + '");', 500);
}

function execHhList(target_id, person_name, conver_type, head_img) {
        api.execScript({
                name :'root',
                frameName :'hh_index',
                script :'openHhList("' + target_id + '",' + old_msg_id + ',"' +person_name + '","' + conver_type +'","hh_index",\"' + head_img + '\");'
        });
//        closeMyself();
}

function closeMyself(){
        api.closeFrame();
        
        api.closeWin({
                name :'hh_group_window'
    });
}

txl_index_window.js(通讯录页面)
//顶部header高度
var header_h;

//var listContact;
//定义user_id
var person_id;
//定义身份
var person_identity;
var footer_h;

var old_msg_id;
var avatar_url;
var listContact_index;
apiready = function() {
        //定位header位置,留出上面电池等空隙,苹果需要
        var $header = $api.dom('header');
        $api.fixIos7Bar($header);
        header_h = api.pageParam.header_h;
        footer_h = api.pageParam.footer_h;
        //加载 listContact 模块
        listContact_index =api.require('listContact');
        person_id = $api.getStorage('person_id');
        person_identity = $api.getStorage('identity');

        //监听来自通讯录页面获取最新会话id的事件
        api.addEventListener({
                name :'setOldMessageId'
        }, function(ret) {
//                api.alert({
//                       msg : 'aaaaa' + ret.value.old_msg_id
//      },function(ret,err){
//              //coding...
//      });
                if (ret&& ret.value) {
                       var value = ret.value;
                       old_msg_id = value.old_msg_id;
                }
        });
//        loadData();
};
//是否重新获取通讯录列表数据
var is_reload = true;
/**
* 加载通讯录列表
* 周枫
* 2015.08.18
*/
function loadData() {
        is_reload = false;
        api.showProgress({
                title : '加载中...',
                modal : false
        });
        //根据用户ID获取通讯录数据
        getTongXunluByUserId(person_id,person_identity, is_reload, function(txl_data) {
                //打开list
               listContact_index.open({
                       y : header_h,
                       w : api.winWidth,
                       h : api.winHeight - header_h - footer_h,
                       cellBgColor : '#FFFFFF',
                       cellHeight : 60,
                       indicator : {       },
                       data : txl_data,
                       borderColor : '#DDDFE3'
                },function(ret, err) {
                       api.hideProgress();
                       //       index:             //点击某个cell所在区域内的cell的下标
                       //  section:           //被点击的cell所在的区域的下标
                       //  key:              //被点击的cell的区域的key
                       //  clickType:           //点击类型,0-cell;1-右边按钮;2-左边的按钮
                       //  btnIndex:          //点击按钮时返回其下标
                       //点击index值
                       var r_i = ret.index;
                       //                                             api.alert({
                       //                                             msg:'r_i:'+r_i+',key:'+ret.key+',txl_data:'
                       //                                },function(ret,err){
                       //                                        //coding...
                       //                                });
                       //json串长度
                       //                       var l_d =getJsonObjLength(txl_data.common);
                       //安卓下只有common乱序
                       //                       if (ret.key =='common') {
                       //                              if (api.systemType == 'android') {
                       //                                      //算出正确的值,因为安卓有BUG倒叙
                       //                                      r_i = l_d - (r_i + 1);
                       //                              }
                       //                       }

                       //名字
                       var title = txl_data[ret.key][r_i].title;
                       //类型: 1:群组 2:学校 3:班级 4:好友
                       var t = txl_data[ret.key][r_i].t;

                       avatar_url = txl_data[ret.key][r_i].img;
                       //类型: 1:群组 2:学校 3:班级 4:好友

                       //                       api.alert({
                       //                              msg : 'target_id:' + target_id + ',id:' + id + ',title:' + title + ',t:' + t + ',key:' + ret.key +",index:" + ret.index + ',section:' + ret.section
                       //                       });
                       /*
                        if (t == 2 || t == 3) {
                        //                              hideMyself();
                        //班级、学校的ID
                        var id = txl_data[ret.key][r_i].id;
                        api.openWin({
                        name : 'txl_content_window',
                        url : 'txl_content_window.html',
                        bounces : true,
                        scrollToTop : true,
                        animation : 'push',
                        showProgress : true,
                        delay : 300,
                        animation : {
                        duration : 400
                        },
                        pageParam : {
                        'header_h' : header_h,
                        'id' : id,
                        'title' : title,
                        't' : t
                        },
                        rect : {
                        x : 0,
                        y : 'auto',
                        w : 'auto',
                        h : 'auto'
                        }
                        });

                        } else if (t == 1) {
                        //初始化群组数据给融云服务器
                       initGroupInfoByUserId(function(init_group_result) {
                        if (init_group_result.code == '200') {
                        //群组
                        var id = txl_data[ret.key][r_i].id;
                        api.openWin({
                        name : 'txl_content_window',
                        url : 'txl_content_window.html',
                        bounces : true,
                        scrollToTop : true,
                        animation : 'push',
                        showProgress : true,
                        delay : 300,
                        animation : {
                        duration : 400
                        },
                        pageParam : {
                        'header_h' : header_h,
                        'id' : id,
                        'title' : title,
                        't' : t
                        },
                        rect : {
                        x : 0,
                        y : 'auto',
                        w : 'auto',
                        h : 'auto'
                        }
                        });
                        }
                        });
                        } else
                        */
                       if (t == 4) {
                               //登录名,target_id
                               vartarget_id = txl_data[ret.key][r_i].login_name;
                               //发送target_id获取最新会话id
                              api.sendEvent({
                                      name : 'getOldMessageId',
                                      extra : {
                                              target_id :target_id,
                                              conver_type :'PRIVATE',
                                              count : 1
                                      }
                               });
                               //打开会话页面
                              setTimeout('execHhList("' + target_id + '","'+ title + '","RIVATE");', 500);
                       } else {
                               //群组id
                               vartarget_id = txl_data[ret.key][r_i].id;
                               //聊天类型
                               varconver_type = txl_data[ret.key][r_i].conver_type;
                              
                               //发送target_id获取最新会话id
                              api.sendEvent({
                                      name : 'getOldMessageId',
                                      extra : {
                                              target_id :target_id,
                                              conver_type :conver_type,
                                              count : 1
                                      }
                               });
                               //打开会话页面
                              setTimeout('execHhList("' + target_id + '","'+ title + '","' + conver_type + '");', 500);
                       }
                });
        });

}

/**
* 根据用户ID获取通讯录数据
* 周枫
* 2015.08.21
*/
function getTongXunluByUserId(user_id, user_identity, is_reload, callback) {
//        api.alert({
//                msg :user_id + ',' + user_identity + ',' + BASE_APP_TYPE
//        }, function(ret, err) {
//                //coding...
//        });

    var txl_group_list = $api.getStorage('txl_group_list');
    //如果当前通讯录数据为0,重新获取
    if(getJsonObjLength(txl_group_list) == 0) {
            is_reload = true;
    }
        if(is_reload) {
                api.ajax({
                       url : BASE_URL_ACTION +'/dsjxt/getAddressBookInfo?user_id=' + user_id + '&user_identity=' +user_identity + '&app_type=' + BASE_APP_TYPE,
                       method : 'get',
                       dataType : 'text',
                       timeout : 60
                },function(ret, err) {
                       var obj = eval('(' + ret + ')');
                       
                       if (obj) {
                              initGroupInfoByUserId(function(init_group_result) {
                                      if (init_group_result.code == '200') {
                                              var obj_length =getJsonObjLength(obj);
                                              if(obj_length > 0){
                                                     is_reload = false;
                                             $api.setStorage('txl_group_list',obj);
                                      } else {
                                              is_reload = true;
                                      }
                                              callback(obj);
                                      }
                               })
                       }
                });
        } else {
//                       api.alert({
//                msg : 'e'
//  },function(ret,err){
//          //coding...
//  });
               callback($api.getStorage('txl_group_list'));
        }
        
}

/**
* 初始化群组数据给融云服务器
* 周枫
* 2015.09.10
*/
function initGroupInfoByUserId(callback) {
        var login_name =$api.getStorage('login_name');
        var person_id =$api.getStorage('person_id');
        var identity =$api.getStorage('identity');
        
        //       api.alert({
        //               msg : BASE_URL_ACTION + '/rongcloud/initGroupInfoByUserId?login_name='+ login_name + '&identity=' + identity + '&person_id=' + person_id +'&ip_addr=' + BASE_SERVER_IP + '&app_type=' + BASE_APP_TYPE
        //  },function(ret,err){
        //         //coding...
        //  });
        api.ajax({
                url :BASE_URL_ACTION + '/rongcloud/initGroupInfoByUserId?login_name=' + login_name +'&identity=' + identity + '&person_id=' + person_id + '&ip_addr=' +BASE_SERVER_IP + '&app_type=' + BASE_APP_TYPE,
                method : 'get',
                dataType :'json'
        }, function(ret, err) {
                if (ret.code!= '200') {
                       api.alert({
                               msg :"对不起,同步群组信息失败,点击重新获取群组信息。"
                       }, function(ret, err) {
                              loadData();
                       });
                } else {
                       callback(ret);
                }
        });
}

/**
* 关闭列表
* 周枫
* 2015.08.18
*/
function closeMyself() {
        listContact_index.close();
        //       api.closeWin();
}

function hideMyself() {
        listContact_index.hide();
}

function showMyself() {
        listContact_index.show();
}

/**
* 延迟打开会话聊天界面
* 周枫
* 2015.08.24
* @param {Object} target_id
* @param {Object} title
* @param {Object} conver_type
* target_id, old_msg_id, person_name, conver_type
*/
function execHhList(target_id, title, conver_type) {
        api.execScript({
                name :'root',
                frameName :'hh_index',
                script :'openHhList("' + target_id + '",' + old_msg_id + ',"' + title +'","' + conver_type + '","txl_index",\"' +avatar_url + '\");'
        });
        hideMyself();
}

function reloadData() {
        is_reload = true;
        api.showProgress({
                title : '加载中...',
                modal : false
        });
        //根据用户ID获取通讯录数据
        getTongXunluByUserId(person_id,person_identity, is_reload ,function(txl_data) {
               
                //打开list
               listContact_index.reloadData({
                       y : header_h,
                       w : api.winWidth,
                       h : api.winHeight - header_h - footer_h,
                       cellBgColor : '#FFFFFF',
                       cellHeight : 60,
                       indicator : {       },
                       data : txl_data,
                       borderColor : '#DDDFE3'
                },function(ret, err) {
                       api.hideProgress();
                       //       index:             //点击某个cell所在区域内的cell的下标
                       //  section:           //被点击的cell所在的区域的下标
                       //  key:              //被点击的cell的区域的key
                       //  clickType:           //点击类型,0-cell;1-右边按钮;2-左边的按钮
                       //  btnIndex:          //点击按钮时返回其下标
                       //点击index值
                       var r_i = ret.index;
               

                       //名字
                       var title = txl_data[ret.key][r_i].title;
                       //类型: 1:群组 2:学校 3:班级 4:好友
                       var t = txl_data[ret.key][r_i].t;

                       avatar_url = txl_data[ret.key][r_i].img;
                       //类型: 1:群组 2:学校 3:班级 4:好友

                       if (t == 4) {
                               //登录名,target_id
                               vartarget_id = txl_data[ret.key][r_i].login_name;
                               //发送target_id获取最新会话id
                              api.sendEvent({
                                      name : 'getOldMessageId',
                                      extra : {
                                              target_id :target_id,
                                              conver_type :'PRIVATE',
                                              count : 1
                                      }
                               });
                               //打开会话页面
                              setTimeout('execHhList("' + target_id + '","'+ title + '","RIVATE");', 1);
                       } else {
                               //群组id
                               vartarget_id = txl_data[ret.key][r_i].id;
                               //聊天类型
                               varconver_type = txl_data[ret.key][r_i].conver_type;
                              
                               //发送target_id获取最新会话id
                              api.sendEvent({
                                      name : 'getOldMessageId',
                                      extra : {
                                              target_id :target_id,
                                              conver_type :conver_type,
                                              count : 1
                                      }
                               });
                               //打开会话页面
                              setTimeout('execHhList("' + target_id + '","'+ title + '","' + conver_type + '");', 1);
                       }
                });
        });
        
}

base_config.js(基础配置页面,好多人找我要这个,我就也开放出来,删除了一些公司内部信息)
var BASE_SERVER_IP = '这是一个ip';

//表情存放路径
var BASE_EMOTION_PATH = 'widget://image/emotion';
//会话相关图片存储路径
var BASE_CHATBOX_PATH = 'widget://image/chatBox';
//附件等下载地址
var BASE_DOWNLOAD_YY_PATH = '';
//平台类型,
var BASE_APP_TYPE = ;
//var BASE_APP_TYPE = ;
// 请求统一路径
var BASE_URL_ACTION = '';
//接收头像默认值
var BASE_RECEIVER_DEFAULT_IMG;
if (BASE_APP_TYPE == 1) {
        BASE_RECEIVER_DEFAULT_IMG = '';
} else {
        BASE_RECEIVER_DEFAULT_IMG = BASE_URL_ACTION+ '.jpg';
}
//cchelper的appKey
var BASE_CCHELPER_KEY_IOS = '';
var BASE_CCHELPER_KEY_ANDROID = '';

var BASE_MY_MENU = '{}';
//分页每页条数
var BASE_PAGE_SIZE = 10;

//当前开通应用数组
var BASE_YY_OPEN = [];
//通知模块
BASE_YY_OPEN[0] = 'tongzhi_index_window';
//课程表模块
BASE_YY_OPEN[1] = 'kcb_index_window';
//资源模块
BASE_YY_OPEN[2] = 'zy_index_window';
//数据库存放fs路径
var BASE_FS_SQDB = '';

var url_path_action;
function getContextActionPath() {
        var pathName =document.location.pathname;

        var index = pathName.substr(1).indexOf("/html");
        var result = pathName.substr(0, index +1);

        result = "";
        return result;
}

//未登录时调用的action路径
var url_path_action_login = getContextActionPath();
//前台action路径
url_path_action = getContextActionPath() + "/";

/*一个工具方法:可以获取所有表情图片的名称和真实URL地址,以JSON对象形式返回。其中以表情文本为 属性名,以图片真实路径为属性值*/
function getImgsPaths(sourcePathOfChatBox, callback) {
        var jsonPath = sourcePathOfChatBox +"/emotion.json";
        //表情的JSON数组
        api.readFile({
                path :jsonPath
        }, function(ret, err) {
                if(ret.status) {
                       var emotionArray = JSON.parse(ret.data);
                       var emotion = {};
                       for (var idx in emotionArray) {
                               varemotionItem = emotionArray[idx];
                               varemotionText = emotionItem["text"];
                               varemotionUrl = "../../image/emotion/" + emotionItem["name"] +".png";
                              emotion[emotionText] = emotionUrl;
                       }
                       /*把emotion对象 回调出去*/
                       if ("function" === typeof (callback)){
                              callback(emotion);
                       }
                }
        });
}



/*
* 获取当前设备操作系统
* 返回值:安卓:android 苹果:ios
* 周枫
* 2015.08.03
*/
function getPhoneSystem() {
        return api.systemType;
}

/**
* 获取json对象的长度
* 周枫
* 2015.08.26
* @param {Object} jsonObj
*/
function getJsonObjLength(jsonObj) {
        var Length = 0;
        for (var item in jsonObj) {
                Length++;
        }
        return Length;
}

/**
*  在artTemplate的标签中使用外部函数的方法
* 周枫
* 2015.08.26
* @param {Object} data
*/
function beforeRenderTemplate(data) {

}


/**
* 获取群组信息
* 周枫
* 2015.12.05
*/
function getGroupListById(target_id, callback) {
        api.ajax({
                url :BASE_URL_ACTION ,
                method :'get',
                dataType :'text'
        }, function(ret, err) {
                var obj =eval('(' + ret + ')');
               $api.setStorage('group_list_data', obj);
                if (obj) {
                       callback(obj);
                }
        });
}

//替换所有的回车换行
function transferBr(content) {
        var string = content;
        try {
                string =string.replace(/\r\n/g, "<br>")
                string =string.replace(/\n/g, "<br>");
        } catch(e) {
               alert(e.message);
        }
        return string;
}

//action提交随机数,6位
var random_num = 0;
function creatRandomNum() {
        for (var i = 0; i < 6; i++) {
                random_num +=Math.floor(Math.random() * 100000);
        }
        return random_num;
}

function closeAppForAndroid() {
        var mkeyTime = new Date().getTime();
        api.addEventListener({
                name :"keyback"
        }, function(ret, err) {
                //如果当前时间减去标志时间大于2秒,说明是第一次点击返回键,反之为2秒内点了2次,则退出。
                if ((newDate().getTime() - mkeyTime) > 2000) {
                       mkeyTime = new Date().getTime();
                       api.toast({
                               msg : '再按一次退出程序',
                               duration: 2000,
                               location: 'middle'
                       });
                } else {
                       api.closeWidget({
                               silent :true
                       });
                }
        });
}

//替换所有字符
String.prototype.replaceAll = function(s1, s2) {
        return this.replace(new RegExp(s1,"gm"), s2);
}
//获取guid
function newGuid() {
        var guid = "";
        for (var i = 1; i <= 32; i++) {
                var n =Math.floor(Math.random() * 16.0).toString(16);
                guid += n;
                if ((i == 8)|| (i == 12) || (i == 16) || (i == 20))
                       guid += "-";
        }
        return guid.toUpperCase();
}





                /**
                 * 延迟加载
                 * 周枫
                 *2015.12.22
                 */
                functionechoInit() {
                       echo.init({
                               offset:0,
                               throttle:0 //设置图片延迟加载的时间
                       });
                }

echo.js (图片延迟加载)
/*! echo.js v1.7.0 | (c) 2015 @toddmotto | https://github.com/toddmotto/echo */
!function(t,e){"function"==typeofdefine&&define.amd?define(function(){returne(t)}):"object"==typeofexports?module.exports=e:t.echo=e(t)}(this,function(t){"usestrict";var e,n,o,r,c,a={},u=function(){},d=function(t){returnnull===t.offsetParent},i=function(t,e){if(d(t))return!1;varn=t.getBoundingClientRect();returnn.right>=e.l&&n.bottom>=e.t&&n.left<=e.r&&n.top<=e.b},l=function(){(r||!n)&&(clearTimeout(n),n=setTimeout(function(){a.render(),n=null},o))};returna.init=function(n){n=n||{};vard=n.offset||0,i=n.offsetVertical||d,f=n.offsetHorizontal||d,s=function(t,e){returnparseInt(t||e,10)};e={t:s(n.offsetTop,i),b:s(n.offsetBottom,i),l:s(n.offsetLeft,f),r:s(n.offsetRight,f)},o=s(n.throttle,250),r=n.debounce!==!1,c=!!n.unload,u=n.callback||u,a.render(),document.addEventListener?(t.addEventListener("scroll",l,!1),t.addEventListener("load",l,!1))t.attachEvent("onscroll",l),t.attachEvent("onload",l))},a.render=function(){for(varn,o,r=document.querySelectorAll("img[data-echo], [data-echo-background]"),d=r.length,l={l:0-e.l,t:0-e.t,bt.innerHeight||document.documentElement.clientHeight)+e.b,rt.innerWidth||document.documentElement.clientWidth)+e.r},f=0;d>f;f++)o=r[f],i(o,l)?(c&&o.setAttribute("data-echo-placeholder",o.src),null!==o.getAttribute("data-echo-background")?o.style.backgroundImage="url("+o.getAttribute("data-echo-background")+")".src=o.getAttribute("data-echo"),c||(o.removeAttribute("data-echo"),o.removeAttribute("data-echo-background")),u(o,"load")):c&&(n=o.getAttribute("data-echo-placeholder"))&&(null!==o.getAttribute("data-echo-background")?o.style.backgroundImage="url("+n+")".src=n,o.removeAttribute("data-echo-placeholder"),u(o,"unload"));d||a.detach()},a.detach=function(){document.removeEventListener?t.removeEventListener("scroll",l):t.detachEvent("onscroll",l),clearTimeout(n)},a});

hammer.js(长按)
/*! Hammer.JS - v2.0.4 - 2014-09-28
* http://hammerjs.github.io/
*
* Copyright (c) 2014 Jorik Tangelder;
* Licensed under the MIT license */
!function(a,b,c,d){"use strict";function e(a,b,c){returnsetTimeout(k(a,c),b)}function f(a,b,c){returnArray.isArray(a)?(g(a,c,c),!0):!1}function g(a,b,c){vare;if(a)if(a.forEach)a.forEach(b,c);elseif(a.length!==d)for(e=0;e<a.length;)b.call(c,a[e],e,a),e++;else for(e ina)a.hasOwnProperty(e)&&b.call(c,a[e],e,a)}function h(a,b,c){for(vare=Object.keys(b),f=0;f<e.length;)(!c||c&&a[e[f]]===d)&&(a[e[f]]=b[e[f]]),f++;returna}function i(a,b){return h(a,b,!0)}function j(a,b,c){vard,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&h(d,c)}functionk(a,b){return function(){return a.apply(b,arguments)}}function l(a,b){returntypeof a==kb?a.apply(b?b[0]||d:d,b):a}function m(a,b){return a===d?b:a}functionn(a,b,c){g(r(b),function(b){a.addEventListener(b,c,!1)})}function o(a,b,c){g(r(b),function(b){a.removeEventListener(b,c,!1)})}functionp(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function q(a,b){returna.indexOf(b)>-1}function r(a){return a.trim().split(/\s+/g)}functions(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(vard=0;d<a.length;){if(c&&a[d][c]==b||!c&&a[d]===b)returnd;d++}return-1}function t(a){return Array.prototype.slice.call(a,0)}functionu(a,b,c){for(var d=[],e=[],f=0;f<a.length;){varg=b?a[f]:a[f];s(e,g)<0&&d.push(a[f]),e[f]=g,f++}returnc&&(d=b?d.sort(function(a,c){return a>c}):d.sort()),d}functionv(a,b){for(varc,e,f=b[0].toUpperCase()+b.slice(1),g=0;g<ib.length;){if(c=ib[g],e=c?c+f:b,ein a)return e;g++}return d}function w(){return ob++}function x(a){varb=a.ownerDocument;return b.defaultView||b.parentWindow}function y(a,b){varc=this;this.manager=a,this.callback=b,this.element=a.element,this.target=a.options.inputTarget,this.domHandler=function(b){l(a.options.enable,[a])&&c.handler(b)},this.init()}functionz(a){var b,c=a.options.inputClass;returnnew(b=c?c:rb?N:sb?Q:qb?S:M)(a,A)}function A(a,b,c){vard=c.pointers.length,e=c.changedPointers.length,f=b&yb&&d-e===0,g=b&(Ab|Bb)&&d-e===0;c.isFirst=!!f,c.isFinal=!!g,f&&(a.session={}),c.eventType=b,B(a,c),a.emit("hammer.input",c),a.recognize(c),a.session.prevInput=c}functionB(a,b){varc=a.session,d=b.pointers,e=d.length;c.firstInput||(c.firstInput=E(b)),e>1&&!c.firstMultiple?c.firstMultiple=E(b):1===e&&(c.firstMultiple=!1);varf=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=F(d);b.timeStamp=nb(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=J(h,i),b.distance=I(h,i),C(c,b),b.offsetDirection=H(b.deltaX,b.deltaY),b.scale=g?L(g.pointers,d):1,b.rotation=g?K(g.pointers,d):0,D(c,b);varj=a.element;p(b.srcEvent.target,j)&&(j=b.srcEvent.target),b.target=j}functionC(a,b){varc=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};(b.eventType===yb||f.eventType===Ab)&&(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}functionD(a,b){varc,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Bb&&(i>xb||h.velocity===d)){varj=h.deltaX-b.deltaX,k=h.deltaY-b.deltaY,l=G(i,j,k);e=l.x,f=l.y,c=mb(l.x)>mb(l.y)?l.x:l.y,g=H(j,k),a.lastInterval=b}elsec=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}functionE(a){for(varb=[],c=0;c<a.pointers.length;)b[c]={clientX:lb(a.pointers[c].clientX),clientY:lb(a.pointers[c].clientY)},c++;return{timeStamp:nb(),pointers:b,center:F(b),deltaX:a.deltaX,deltaY:a.deltaY}}functionF(a){varb=a.length;if(1===b)return{x:lb(a[0].clientX),y:lb(a[0].clientY)};for(varc=0,d=0,e=0;b>e;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:lb(c/b),y:lb(d/b)}}functionG(a,b,c){return{x:b/a||0,y:c/a||0}}function H(a,b){returna===b?Cb:mb(a)>=mb(b)?a>0?Db:Eb:b>0?Fb:Gb}functionI(a,b,c){c||(c=Kb);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];returnMath.sqrt(d*d+e*e)}function J(a,b,c){c||(c=Kb);vard=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}functionK(a,b){return J(b[1],b[0],Lb)-J(a[1],a[0],Lb)}function L(a,b){returnI(b[0],b[1],Lb)/I(a[0],a[1],Lb)}functionM(){this.evEl=Nb,this.evWin=Ob,this.allow=!0,this.pressed=!1,y.apply(this,arguments)}functionN(){this.evEl=Rb,this.evWin=Sb,y.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}functionO(){this.evTarget=Ub,this.evWin=Vb,this.started=!1,y.apply(this,arguments)}functionP(a,b){var c=t(a.touches),d=t(a.changedTouches);returnb&(Ab|Bb)&&(c=u(c.concat(d),"identifier",!0)),[c,d]}functionQ(){this.evTarget=Xb,this.targetIds={},y.apply(this,arguments)}functionR(a,b){varc=t(a.touches),d=this.targetIds;if(b&(yb|zb)&&1===c.length)returnd[c[0].identifier]=!0,[c,c];var e,f,g=t(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){returnp(a.target,i)}),b===yb)for(e=0;e<f.length;)d[f[e].identifier]=!0,e++;for(e=0;e<g.length;)d[g[e].identifier]&&h.push(g[e]),b&(Ab|Bb)&&deleted[g[e].identifier],e++;return h.length?[u(f.concat(h),"identifier",!0),h]:void0}function S(){y.apply(this,arguments);vara=k(this.handler,this);this.touch=new Q(this.manager,a),this.mouse=newM(this.manager,a)}function T(a,b){this.manager=a,this.set(b)}functionU(a){if(q(a,bc))return bc;var b=q(a,cc),c=q(a,dc);return b&&c?cc+""+dc:b||c?b?cc:dc:q(a,ac)?ac:_b}functionV(a){this.id=w(),this.manager=null,this.options=i(a||{},this.defaults),this.options.enable=m(this.options.enable,!0),this.state=ec,this.simultaneous={},this.requireFail=[]}functionW(a){return a&jc?"cancel":a&hc?"end":a&gc?"move":a&fc?"start":""}functionX(a){returna==Gb?"down":a==Fb?"up":a==Db?"left":a==Eb?"right":""}functionY(a,b){var c=b.manager;return c?c.get(a):a}function Z(){V.apply(this,arguments)}function$(){Z.apply(this,arguments),this.pX=null,this.pY=null}function_(){Z.apply(this,arguments)}functionab(){V.apply(this,arguments),this._timer=null,this._input=null}functionbb(){Z.apply(this,arguments)}function cb(){Z.apply(this,arguments)}functiondb(){V.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}functioneb(a,b){return b=b||{},b.recognizers=m(b.recognizers,eb.defaults.preset),newfb(a,b)}functionfb(a,b){b=b||{},this.options=i(b,eb.defaults),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.element=a,this.input=z(this),this.touchAction=newT(this,this.options.touchAction),gb(this,!0),g(b.recognizers,function(a){varb=this.add(newa[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}functiongb(a,b){varc=a.element;g(a.options.cssProps,function(a,d){c.style[v(c.style,d)]=b?a:""})}functionhb(a,c){vard=b.createEvent("Event");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}varib=["","webkit","moz","MS","ms","o"],jb=b.createElement("div"),kb="function",lb=Math.round,mb=Math.abs,nb=Date.now,ob=1,pb=/mobile|tablet|ip(ad|hone|od)|android/i,qb="ontouchstart"ina,rb=v(a,"ointerEvent")!==d,sb=qb&&pb.test(navigator.userAgent),tb="touch",ub="pen",vb="mouse",wb="kinect",xb=25,yb=1,zb=2,Ab=4,Bb=8,Cb=1,Db=2,Eb=4,Fb=8,Gb=16,Hb=Db|Eb,Ib=Fb|Gb,Jb=Hb|Ib,Kb=["x","y"],Lb=["clientX","clientY"];y.prototype={handler:function(){},init:function(){this.evEl&&n(this.element,this.evEl,this.domHandler),this.evTarget&&n(this.target,this.evTarget,this.domHandler),this.evWin&&n(x(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&o(this.element,this.evEl,this.domHandler),this.evTarget&&o(this.target,this.evTarget,this.domHandler),this.evWin&&o(x(this.element),this.evWin,this.domHandler)}};varMb={mousedown:yb,mousemove:zb,mouseup:Ab},Nb="mousedown",Ob="mousemovemouseup";j(M,y,{handler:function(a){varb=Mb[a.type];b&yb&&0===a.button&&(this.pressed=!0),b&zb&&1!==a.which&&(b=Ab),this.pressed&&this.allow&&(b&Ab&&(this.pressed=!1),this.callback(this.manager,b,{pointers:[a],changedPointers:[a],pointerType:vb,srcEvent:a}))}});varPb={pointerdown:yb,pointermove:zb,pointerup:Ab,pointercancel:Bb,pointerout:Bb},Qb={2:tb,3:ub,4:vb,5:wb},Rb="pointerdown",Sb="pointermovepointerup pointercancel";a.MSPointerEvent&&(Rb="MSPointerDown",Sb="MSPointerMoveMSPointerUp MSPointerCancel"),j(N,y,{handler:function(a){varb=this.store,c=!1,d=a.type.toLowerCase().replace("ms",""),e=Pb[d],f=Qb[a.pointerType]||a.pointerType,g=f==tb,h=s(b,a.pointerId,"pointerId");e&yb&&(0===a.button||g)?0>h&&(b.push(a),h=b.length-1):e&(Ab|Bb)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});varTb={touchstart:yb,touchmove:zb,touchend:Ab,touchcancel:Bb},Ub="touchstart",Vb="touchstarttouchmove touchend touchcancel";j(O,y,{handler:function(a){varb=Tb[a.type];if(b===yb&&(this.started=!0),this.started){varc=P.call(this,a,b);b&(Ab|Bb)&&c[0].length-c[1].length===0&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:tb,srcEvent:a})}}});varWb={touchstart:yb,touchmove:zb,touchend:Ab,touchcancel:Bb},Xb="touchstarttouchmove touchend touchcancel";j(Q,y,{handler:function(a){varb=Wb[a.type],c=R.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:tb,srcEvent:a})}}),j(S,y,{handler:function(a,b,c){vard=c.pointerType==tb,e=c.pointerType==vb;if(d)this.mouse.allow=!1;elseif(e&&!this.mouse.allow)return;b&(Ab|Bb)&&(this.mouse.allow=!0),this.callback(a,b,c)},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});varYb=v(jb.style,"touchAction"),Zb=Yb!==d,$b="compute",_b="auto",ac="manipulation",bc="none",cc="pan-x",dc="pan-y";T.prototype={set:function(a){a==$b&&(a=this.compute()),Zb&&(this.manager.element.style[Yb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){vara=[];return g(this.manager.recognizers,function(b){l(b.options.enable,)&&(a=a.concat(b.getTouchAction()))}),U(a.join(""))},preventDefaults:function(a){if(!Zb){varb=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return voidb.preventDefault();var d=this.actions,e=q(d,bc),f=q(d,dc),g=q(d,cc);returne||f&&c&Hb||g&&c&Ib?this.preventSrc(b):void0}},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};varec=1,fc=2,gc=4,hc=8,ic=hc,jc=16,kc=32;V.prototype={defaults:{},set:function(a){returnh(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,"recognizeWith",this))returnthis;var b=this.simultaneous;returna=Y(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){returnf(a,"dropRecognizeWith",this)?thisa=Y(a,this),deletethis.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,"requireFailure",this))returnthis;var b=this.requireFail;returna=Y(a,this),-1===s(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,"dropRequireFailure",this))returnthis;a=Y(a,this);var b=s(this.requireFail,a);returnb>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){returnthis.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){functionb(b){c.manager.emit(c.options.event+(b?W(d):""),a)}varc=this,d=this.state;hc>d&&b(!0),b(),d>=hc&&b(!0)},tryEmit:function(a){returnthis.canEmit()?this.emit(a):void(this.state=kc)},canEmit:function(){for(vara=0;a<this.requireFail.length;){if(!(this.requireFail[a].state&(kc|ec)))return!1;a++}return!0},recognize:function(a){varb=h({},a);returnl(this.options.enable,[this,b])?(this.state&(ic|jc|kc)&&(this.state=ec),this.state=this.process(b),void(this.state&(fc|gc|hc|jc)&&this.tryEmit(b)))this.reset(),void(this.state=kc))},process:function(){},getTouchAction:function(){},reset:function(){}},j(Z,V,{defaults:{pointers:1},attrTest:function(a){varb=this.options.pointers;return0===b||a.pointers.length===b},process:function(a){var b=this.state,c=a.eventType,d=b&(fc|gc),e=this.attrTest(a);returnd&&(c&Bb||!e)?b|jc:d||e?c&Ab?b|hc:b&fc?b|gc:fc:kc}}),j($,Z,{defaults:{event:"pan",threshold:10,pointers:1,direction:Jb},getTouchAction:function(){vara=this.options.direction,b=[];returna&Hb&&b.push(dc),a&Ib&&b.push(cc),b},directionTest:function(a){varb=this.options,c=!0,d=a.distance,e=a.direction,f=a.deltaX,g=a.deltaY;returne&b.direction||(b.direction&Hb?(e=0===f?Cb:0>f?Db:Eb,c=f!=this.pX,d=Math.abs(a.deltaX))e=0===g?Cb:0>g?Fb:Gb,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){returnZ.prototype.attrTest.call(this,a)&&(this.state&fc||!(this.state&fc)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;varb=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this._super.emit.call(this,a)}}),j(_,Z,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[bc]},attrTest:function(a){returnthis._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&fc)},emit:function(a){if(this._super.emit.call(this,a),1!==a.scale){varb=a.scale<1?"in":"out";this.manager.emit(this.options.event+b,a)}}}),j(ab,V,{defaults:{event:"press",pointers:1,time:500,threshold:5},getTouchAction:function(){return[_b]},process:function(a){varb=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime>b.time;if(this._input=a,!d||!c||a.eventType&(Ab|Bb)&&!f)this.reset();elseif(a.eventType&yb)this.reset(),this._timer=e(function(){this.state=ic,this.tryEmit()},b.time,this);elseif(a.eventType&Ab)return ic;returnkc},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===ic&&(a&&a.eventType&Ab?this.manager.emit(this.options.event+"up",a)this._input.timeStamp=nb(),this.manager.emit(this.options.event,this._input)))}}),j(bb,Z,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[bc]},attrTest:function(a){returnthis._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&fc)}}),j(cb,Z,{defaults:{event:"swipe",threshold:10,velocity:.65,direction:Hb|Ib,pointers:1},getTouchAction:function(){return$.prototype.getTouchAction.call(this)},attrTest:function(a){varb,c=this.options.direction;return c&(Hb|Ib)?b=a.velocity:c&Hb?b=a.velocityX:c&Ib&&(b=a.velocityY),this._super.attrTest.call(this,a)&&c&a.direction&&a.distance>this.options.threshold&&mb(b)>this.options.velocity&&a.eventType&Ab},emit:function(a){varb=X(a.direction);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),j(db,V,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:2,posThreshold:10},getTouchAction:function(){return[ac]},process:function(a){varb=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime<b.time;if(this.reset(),a.eventType&yb&&0===this.count)returnthis.failTimeout();if(d&&f&&c){if(a.eventType!=Ab)returnthis.failTimeout();var g=this.pTime?a.timeStamp-this.pTime<b.interval:!0,h=!this.pCenter||I(this.pCenter,a.center)<b.posThreshold;this.pTime=a.timeStamp,this.pCenter=a.center,h&&g?this.count+=1:this.count=1,this._input=a;vari=this.count%b.taps;if(0===i)returnthis.hasRequireFailures()?(this._timer=e(function(){this.state=ic,this.tryEmit()},b.interval,this),fc):ic}returnkc},failTimeout:function(){returnthis._timer=e(function(){this.state=kc},this.options.interval,this),kc},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==ic&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),eb.VERSION="2.0.4",eb.defaults={domEvents:!1,touchActionb,enable:!0,inputTarget:null,inputClass:null,preset:[[bb,{enable:!1}],[_,{enable:!1},["rotate"]],[cb,{direction:Hb}],[$,{direction:Hb},["swipe"]],[db],[db,{event:"doubletap",taps:2},["tap"]],[ab]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};varlc=1,mc=2;fb.prototype={set:function(a){returnh(this.options,a),a.touchAction&&this.touchAction.update(),a.inputTarget&&(this.input.destroy(),this.input.target=a.inputTarget,this.input.init()),this},stop:function(a){this.session.stopped=a?mc:lc},recognize:function(a){varb=this.session;if(!b.stopped){this.touchAction.preventDefaults(a);varc,d=this.recognizers,e=b.curRecognizer;(!e||e&&e.state&ic)&&(e=b.curRecognizer=null);for(varf=0;f<d.length;)c=d[f],b.stopped===mc||e&&c!=e&&!c.canRecognizeWith(e)?c.reset():c.recognize(a),!e&&c.state&(fc|gc|hc)&&(e=b.curRecognizer=c),f++}},get:function(a){if(ainstanceof V)return a;for(varb=this.recognizers,c=0;c<b.length;c++)if(b[c].options.event==a)returnb[c];return null},add:function(a){if(f(a,"add",this))return this;varb=this.get(a.options.event);return b&&this.remove(b),this.recognizers.push(a),a.manager=this,this.touchAction.update(),a},remove:function(a){if(f(a,"remove",this))returnthis;var b=this.recognizers;returna=this.get(a),b.splice(s(b,a),1),this.touchAction.update(),this},on:function(a,b){varc=this.handlers;return g(r(a),function(a){c[a]=c[a]||[],c[a].push(b)}),this},off:function(a,b){varc=this.handlers;return g(r(a),function(a){b?c[a].splice(s(c[a],b),1):deletec[a]}),this},emit:function(a,b){this.options.domEvents&&hb(a,b);varc=this.handlers[a]&&this.handlers[a].slice();if(c&&c.length){b.type=a,b.preventDefault=function(){b.srcEvent.preventDefault()};for(vard=0;d<c.length;)c[d](b),d++}},destroy:function(){this.element&&gb(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},h(eb,{INPUT_START:yb,INPUT_MOVE:zb,INPUT_END:Ab,INPUT_CANCEL:Bb,STATE_POSSIBLE:ec,STATE_BEGAN:fc,STATE_CHANGED:gc,STATE_ENDED:hc,STATE_RECOGNIZED:ic,STATE_CANCELLED:jc,STATE_FAILED:kc,DIRECTION_NONE:Cb,DIRECTION_LEFTb,DIRECTION_RIGHT:Eb,DIRECTION_UP:Fb,DIRECTION_DOWN:Gb,DIRECTION_HORIZONTAL:Hb,DIRECTION_VERTICAL:Ib,DIRECTION_ALL:Jb,Manager:fb,Input:y,TouchAction:T,TouchInput,MouseInput:M,PointerEventInput:N,TouchMouseInput:S,SingleTouchInput:O,Recognizer:V,AttrRecognizer:Z,Tap:db,Pan,Swipe:cb,Pinch:_,Rotate:bb,Press:ab,on:n,off,each:g,merge:i,extend:h,inherit:j,bindFn:k,prefixed:v}),typeofdefine==kb&&define.amd?define(function(){returneb}):"undefined"!=typeofmodule&&module.exports?module.exports=eb:a[c]=eb}(window,document,"Hammer");
//# sourceMappingURL=hammer.min.map
template.js(腾讯渲染模板)
!function(e){"use strict";var n=function(e,r){returnn["string"==typeofr?"compile":"render"].apply(n,arguments)};n.version="2.0.4",n.openTag="<%",n.closeTag="%>",n.isEscape=!0,n.isCompress=!1,n.parser=null,n.render=function(e,r){vart=n.get(e)||i({id:e,name:"Render Error",message:"NoTemplate"});return t(r)},n.compile=function(e,t){function a(r){try{returnnew s(r,e)+""}catch(o){return u?i(o)():n.compile(e,t,!0)(r)}}varc=arguments,u=c[2],l="anonymous";"string"!=typeoft&&(u=c[1],t=c[0],e=l);try{var s=o(e,t,u)}catch(p){returnp.id=e||t,p.name="Syntax Error",i(p)}returna.prototype=s.prototype,a.toString=function(){returns.toString()},e!==l&&(r[e]=a),a};varr=n.cache={},t=n.helpers=function(){var e=function(n,r){return"string"!=typeofn&&(r=typeofn,"number"===r?n+="":n="function"===r?e(n.call(n)):""),n},r={"<":"<",">":">",'"':""","'":"'","&":"&"},t=function(n){returne(n).replace(/&(?![\w#]+;)|[<>"']/g,function(e){returnr[e]})},i=Array.isArray||function(e){return"[object Array]"==={}.toString.call(e)},o=function(e,n){if(i(e))for(varr=0,t=e.length;t>r;r++)n.call(e,e[r],r,e);else for(r ine)n.call(e,e[r],r)};return{$include:n.render,$string:e,$escape:t,$each}}();n.helper=function(e,n){t[e]=n},n.onerror=function(n){varr="Template Error\n\n";for(var t inn)r+="<"+t+">\n"+n[t]+"\n\n";e.console&&console.error(r)},n.get=function(t){vari;if(r.hasOwnProperty(t))i=r[t];else if("document"in e){varo=document.getElementById(t);if(o){vara=o.value||o.innerHTML;i=n.compile(t,a.replace(/^\s*|\s*$/g,""))}}returni};var i=function(e){return n.onerror(e),function(){return"{TemplateError}"}},o=function(){vare=t.$each,r="break,case,catch,continue,debugger,default,delete,do,else,false,finally,for,function,if,in,instanceof,new,null,return,switch,this,throw,true,try,typeof,var,void,while,with,abstract,boolean,byte,char,class,const,double,enum,export,extends,final,float,goto,implements,import,int,interface,long,native,package,private,protected,public,short,static,super,synchronized,throws,transient,volatile,arguments,let,yield,undefined",i=/\/\*[\w\W]*?\*\/|\/\/[^\n]*\n|\/\/[^\n]*$|"(?:[^"\\]|\\[\w\W])*"|'(?:[^'\\]|\\[\w\W])*'|[\s\t\n]*\.[\s\t\n]*[$\w\.]+/g,o=/[^\w$]+/g,a=newRegExp(["\\b"+r.replace(/,/g,"\\b|\\b")+"\\b"].join("|"),"g"),c=/^\d[^,]*|,\d[^,]*/g,u=/^,+|,+$/g,l=function(e){returne.replace(i,"").replace(o,",").replace(a,"").replace(c,"").replace(u,"").split(/^$|,+/)};returnfunction(r,i,o){function a(e){return m+=e.split(/\n/).length-1,n.isCompress&&(e=e.replace(/[\n\r\t\s]+/g,"").replace(/<!--.*?-->/g,"")),e&&(e=x[1]+p(e)+x[2]+"\n"),e}functionc(e){var r=m;if($?e=$(e)&&(e=e.replace(/\n/g,function(){returnm++,"$line="+m+";"})),0===e.indexOf("=")){vari=!/^=[=#]/.test(e);if(e=e.replace(/^=[=#]?|[\s;]*$/g,""),i&&n.isEscape){vara=e.replace(/\s*\([^\)]+\)/,"");t.hasOwnProperty(a)||/^(include|print)$/.test(a)||(e="$escape("+e+")")}elsee="$string("+e+")";e=x[1]+e+x[2]}returno&&(e="$line="+r+";"+e),u(e),e+"\n"}functionu(n){n=l(n),e(n,function(e){e&&!y.hasOwnProperty(e)&&(s(e),y[e]=!0)})}functions(e){varn;"print"===e?n=T:"include"===e?(v.$include=t.$include,n=O)n="$data."+e,t.hasOwnProperty(e)&&(v[e]=t[e],n=0===e.indexOf("[       DISCUZ_CODE_9        ]quot;)?"$helpers."+e:n+"===undefined?$helpers."+e+":"+n)),w+=e+"="+n+","}functionp(e){return"'"+e.replace(/('|\\)/g,"\\$1").replace(/\r/g,"\\r").replace(/\n/g,"\\n")+"'"}varf=n.openTag,d=n.closeTag,$=n.parser,g=i,h="",m=1,y={$data:1,$id:1,$helpers:1,$out:1,$line:1},v={},w="var$helpers=this,"+(o?"$line=0,":""),b="".trim,x=b?["$out='';","$out+=",";","$out"]:["$out=[];","$out.push(",");","$out.join('')"],E=b?"$out+=$text;return$text;":"$out.push($text);",T="function($text){"+E+"}",O="function(id,data){data=data||$data;var$text=$helpers.$include(id,data,$id);"+E+"}";e(g.split(f),function(e){e=e.split(d);varn=e[0],r=e[1];1===e.length?h+=a(n)h+=c(n),r&&(h+=a(r)))}),g=h,o&&(g="try{"+g+"}catch(e){"+"throw{"+"idid,"+"name:'RenderError',"+"message:e.message,"+"lineline,"+"source:"+p(i)+".split(/\\n/)[$line-1].replace(/^[\\s\\t]+/,'')"+"};"+"}"),g=w+x[0]+g+"returnnew String("+x[3]+");";try{var S=newFunction("$data","$id",g);returnS.prototype=v,S}catch(P){throw P.temp="function anonymous($data,$id){"+g+"}",P}}}();"function"==typeofdefine?define(function(){return n}):"undefined"!=typeof exports&&(module.exports=n),e.template=n}(this);

本帖子中包含更多资源    您需要 登录 才可以下载或查看,没有帐号?立即注册

3

查看全部评分

主题:
73
帖子:
4727
云币:
1469

足球狗狗年旺旺旺APICloud粉丝连续签到100天APICloud毕业勋章APICloud骨灰粉模块开发者签到党土豪志愿者一周年中秋节社会摇圣诞节老司机你吃屎!首长好!我还是个孩子!托马斯全旋女朋友不想上班!装逼侠单身狗超人SB侠

发表于 2015-12-24 09:56:51 |
不弄个下载地址看看效果

新手上路

UID:113162

主题:
28
帖子:
76
云币:
312
发表于 2015-12-24 09:58:20 |
666666666666666666666

业余车手

UID:46814

主题:
152
帖子:
628
云币:
18255

一周年中秋节社会摇圣诞节老司机你吃屎!首长好!我还是个孩子!托马斯全旋女朋友不想上班!装逼侠超人锤子侠SB侠我李白贼6

 楼主| 发表于 2015-12-24 10:35:39 |
勇可可 发表于 2015-12-24 09:56
不弄个下载地址看看效果

我这个产品形式是卖账号的,所以就不提供地址了,哈哈

你的勋章真多

新手上路

UID:12667

主题:
23
帖子:
83
云币:
512
发表于 2015-12-24 10:39:31 |
留位支持

主题:
13
帖子:
51
云币:
89
发表于 2015-12-24 11:31:34 |
前排混个脸熟

主题:
13
帖子:
51
云币:
89
发表于 2015-12-24 11:32:47 |
再占一楼

新手上路

UID:200528

主题:
2
帖子:
28
云币:
37
发表于 2015-12-24 11:46:01 |
你这么6请教个问题呗,rongcloud连接时错误码为31004,这种情况都有哪些原因?谢谢啊

业余车手

UID:46814

主题:
152
帖子:
628
云币:
18255

一周年中秋节社会摇圣诞节老司机你吃屎!首长好!我还是个孩子!托马斯全旋女朋友不想上班!装逼侠超人锤子侠SB侠我李白贼6

 楼主| 发表于 2015-12-24 13:31:02 |
欢欢12 发表于 2015-12-24 11:46
你这么6请教个问题呗,rongcloud连接时错误码为31004,这种情况都有哪些原因?谢谢啊 ...

能详细点吗,哪个方法的时候报错

业余车手

UID:46814

主题:
152
帖子:
628
云币:
18255

一周年中秋节社会摇圣诞节老司机你吃屎!首长好!我还是个孩子!托马斯全旋女朋友不想上班!装逼侠超人锤子侠SB侠我李白贼6

 楼主| 发表于 2015-12-24 13:32:08 |
欢欢12 发表于 2015-12-24 11:46
你这么6请教个问题呗,rongcloud连接时错误码为31004,这种情况都有哪些原因?谢谢啊 ...

31004         错误的令牌(Token),Token 解析失败,请重新向身份认证服务器获取 Token
您需要登录后才可以回帖 登录 | 立即注册

快速回复 返回顶部 返回列表