NtkoWebSign.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529
  1. /**
  2. * WebSign控件。
  3. * 使用方法:
  4. * var obj=new NtkoWebSign();
  5. * loadWebSign(targetId,attachmentId,espFileIdx,widthx,heightx);
  6. * targetId: 文档容器id
  7. * espFileIdx:附件id,如果指定那么根据该文件id加载签章。
  8. *
  9. * saveRemote:保存文档到服务器
  10. *
  11. * @returns {OfficeControl}
  12. */
  13. NtkoWebSign=function(){
  14. {
  15. var _self=this;
  16. this.user = {id:"0",name:"开发用户",groupId:"0",groupName:"开发部"};
  17. this.divId="targetId";
  18. this.webSignId="ntkoocx";
  19. this.webSignObj=null;
  20. this.espFileId="";
  21. this.height="0"; //隐藏
  22. this.width="0"; //隐藏
  23. this.checkForm="";
  24. this.configStyle={user:{},imgStyle:'display: none;',buttonStyle:"display: none;"};
  25. };
  26. /**
  27. * 加载NTKO Web版电子印章控件
  28. * arg targetId 加载控件存放的目标Dom元素(Div)最好是唯一的。
  29. * arg attachmentId NTKO电子印章对象ID。如果不为空,加载对应的文件 最好是唯一的
  30. * espFileIdx 有没有对应的 NTKO电子印章文件(info文件),加载时放入!espFileIdx唯一标识
  31. */
  32. this.loadWebSign = function(targetId,attachmentId,espFileIdx,conf) {
  33. this.divId=targetId;
  34. this.width=$("#"+targetId).width();
  35. this.height=$("#"+targetId).height();
  36. if((attachmentId!="")&&(attachmentId!=null)&&('undefined' != typeof (attachmentId))){
  37. this.webSignId=attachmentId;
  38. }
  39. this.espFileId=espFileIdx;
  40. this.configStyle=$.extend({},this.configStyle,conf);
  41. this.user = conf.user;
  42. var cabPath=__ctx +"/js/ntkoWebSign/ntkoWebSign.cab#version=4,0,2,0";
  43. var tags="";
  44. //Web印章对象
  45. tags+='<div id="webSignSeal" style="display: block;">';
  46. tags+='<object id="'+this.webSignId+'" classid="clsid:DB5B521C-DA92-48e0-AE32-BDC944858D42" codebase="'+cabPath+'" ';
  47. tags+='style="display:none"> ';
  48. tags+='<param name="BackColor" value="16744576"> ';
  49. tags+='<param name="ForeColor" value="16777215"> ';
  50. tags+='<SPAN STYLE="color:red">不能装载NTKO WebSignHelper 控件。请在检查浏览器的选项中检查浏览器的安全设置。</SPAN> ';
  51. tags+='</object>';
  52. tags+='</div> ';
  53. //用于默认要需要表单验证功能标记 (如果表单设计没有需要表单验证的字段(没有页面对象中没有validate="{'isWebSign':true}")时,这标签可以防止签单报错)
  54. tags+='<input type="hidden" id="isWebSignMark" name="isWebSignMark" lablename="验证功能标记" validate="{\'isWebSign\':true}" value="WebSignTrue" />';
  55. //用于获取鼠标的位置的对象
  56. tags+='<input type="hidden" id="mousePosX" name="mousePosX" value="50" />';
  57. tags+='<input type="hidden" id="mousePosY" name="mousePosY" value="50" />';
  58. $('#'+this.divId).html(tags);
  59. this.webSignObj = document.getElementById(this.webSignId);
  60. if('undefined' == typeof (this.webSignObj.StatusCode)){
  61. $.ligerDialog.warn("不能装载WEB印章控件,必须使用IE内核浏览器。可能需要在浏览器的Internet选项安全设置中修改ActiveX配置。",'提示信息',function(){
  62. window.history.back();
  63. });
  64. return false;
  65. }
  66. if((this.espFileId!="")&&(this.espFileId!=null)&&('undefined' != typeof (this.espFileId))){
  67. this.loadFileInfo();
  68. }
  69. };
  70. /**
  71. * 获取webSignObj,代表当前的电子印章对象
  72. */
  73. this.getntkoWebSignObj = function() {
  74. // this.webSignObj.IsShowRect = false;
  75. return this.webSignObj;
  76. };
  77. //注意:以下四个方法是接管印章事件的内部方法。
  78. //NtkoReservedEvent_BeforeDoSecSign如果返回true,标识可以继续盖章,如果返回false,标识取消印章。
  79. //可以在这个函数中,调用Helper对象的DoWebExecute2方法查询服务器是否可以继续盖章并返回true或者false.
  80. this.NtkoReservedEvent_BeforeDoSecSign = function (UserName,SignName,SignUser,SignSN)
  81. {
  82. return true;
  83. // alert("1NtkoReservedEvent_BeforeDoSecSign:UserName="+UserName+",SignName="+SignName+",SignUser="+SignUser+",SignSN="+SignSN);
  84. try
  85. {
  86. var retValue = this.webSignObj.DoWebExecute2("http://192.168.0.100/testchecksign/checksign.asp",
  87. "UserName="+UserName+"&SignName="+SignName+"&SignUser="+SignUser+"&SignSN="+SignSN);
  88. // alert(retValue);
  89. return true;
  90. }
  91. catch(err)
  92. {
  93. alert("查询印章可用状态错误!"+ err.number + ":" + err.description);
  94. return false;
  95. }
  96. };
  97. //NtkoReservedEvent_BeforeDoSecSignFromEkey如果返回true,标识可以继续盖章,如果返回false,标识取消印章。
  98. //可以在这个函数中,调用Helper对象的DoWebExecute2方法查询服务器是否可以继续盖章并返回true或者false.
  99. this.NtkoReservedEvent_BeforeDoSecSignFromEkey = function (UserName,SignName,SignUser,SignSN,EkeySN)
  100. {
  101. return true;
  102. // alert("NtkoReservedEvent_BeforeDoSecSignFromEkey:UserName="+UserName+",SignName="+SignName+",SignUser="+SignUser+",SignSN="+SignSN+",EkeySN="+EkeySN);
  103. try
  104. {
  105. var retValue = this.webSignObj.DoWebExecute2("http://192.168.0.100/testchecksign/checksign.asp",
  106. "UserName="+UserName+"&SignName="+SignName+"&SignUser="+SignUser+"&SignSN="+SignSN+"&EkeySN="+EkeySN);
  107. // alert(retValue);
  108. return true;
  109. }
  110. catch(err)
  111. {
  112. alert("查询印章可用状态错误!"+ err.number + ":" + err.description);
  113. return false;
  114. }
  115. };
  116. //该事件在印章被删除之后触发。
  117. this.NtkoReservedEvent_AfterSecSignDeleted = function(UserName,SignName,SignUser,SignSN,EkeySN,UserData)
  118. {
  119. //alert("3NtkoReservedEvent_AfterSecSignDeleted:UserName="+UserName+",SignName="+SignName+",SignUser="+SignUser+",SignSN="+SignSN+",EkeySN="+EkeySN+",UserData="+UserData);
  120. };
  121. //NtkoReservedEvent_BeforeSecSignCheckRight事件在印章需要验证权限之前被触发。
  122. /***************************************************************
  123. 其中的SignType:印章类型.0标识印章.1标识手写签名,2标识键盘批注
  124. 返回0,1,2.
  125. 0:标识用户自定义权限验证成功,且不需要系统进一步验证。
  126. 1:标识用户自定义权限验证失败,且不需要系统进一步验证。
  127. 2:标识用户自定义权限不起作用,需要系统进一步验证(用自身方法)
  128. /***************************************************************/
  129. this.NtkoReservedEvent_BeforeSecSignCheckRight = function(UserName,SignName,SignUser,SignSN,EkeySN,SignType,UserData)
  130. {
  131. // alert("BeforeSecSignCheckRight:UserName="+UserName+",SignName="+SignName+",SignUser="+SignUser+
  132. // ",SignSN="+SignSN+",EkeySN="+EkeySN+",SignType="+SignType+",UserData="+UserData);
  133. /***********************************************************************
  134. //以下可以通过调用Helper对象的DoWebExecute2方法查询服务器
  135. try
  136. {
  137. var retValue = ntkoobj.DoWebExecute2("http://192.168.0.100/testchecksign/checkright.asp",
  138. "UserName="+UserName+"&SignName="+SignName+"&SignUser="+SignUser+"&SignSN="+SignSN+"&EkeySN="+EkeySN);
  139. alert(retValue);
  140. return 0; //0:标识用户自定义权限验证成功,且不需要系统进一步验证。
  141. }
  142. catch(err)
  143. {
  144. alert("查询印章权限错误!"+ err.number + ":" + err.description);
  145. return 1; //1:标识用户自定义权限验证失败,且不需要系统进一步验证。
  146. }
  147. *****************************************************************/
  148. return 2; //2:标识用户自定义权限不起作用,需要系统进一步验证(用自身方法)
  149. };
  150. /**
  151. * 增加有提示的手写WEB批注(没有自动对正大小)
  152. */
  153. this.AddSecHandSign=function()
  154. {
  155. var secSignObj = this.webSignObj.AddSecSignOcx("SecHandSignID",20,20);
  156. secSignObj.WebSignInfo = this.checkPrintForm(); //要Web签章验证的信息;
  157. secSignObj.HandSignPenColor = 14402205; // 此数值计算方式为:假设需要设定颜色值RGB,则value = (blue * 65536) + (green * 256) + red
  158. secSignObj.HandSignPenWidth = 5; //笔宽为5
  159. secSignObj.HandSignPenStyle = 0; //笔形为1
  160. //secSignObj.IsReadOnlyMode = true;
  161. this.webSignObj.AddSecHandSign(secSignObj,_self.user.name,0,false,false,true,true,null,true);
  162. };
  163. /**
  164. * 增加没有提示的手写WEB批注(自动对正大小)
  165. */
  166. this.AddSecHandSignNoPrompt=function()
  167. {
  168. var strxy = this.getXy();
  169. if( strxy!="" && (strxy.split("&").length==2)){
  170. var arrys = strxy.split("&");
  171. var secSignObj = this.webSignObj.AddSecSignOcx("SecHandSignID",arrys[0],arrys[1]);
  172. if(secSignObj)
  173. {
  174. secSignObj.WebSignInfo = this.checkPrintForm(); //要Web签章验证的信息;
  175. // secSignObj.HandSignPenColor = 0; // 此数值计算方式为:假设需要设定颜色值RGB,则value = (blue * 65536) + (green * 256) + red
  176. secSignObj.HandSignPenWidth = 3; //笔宽为5
  177. secSignObj.HandSignPenStyle = 0; //笔形为1
  178. secSignObj.UserData = "my user data";
  179. this.webSignObj.AddSecHandSign(secSignObj,_self.user.name,2,false,false,true,false,null,false,80);
  180. }
  181. }
  182. };
  183. /**
  184. * 增加有提示的手写WEB批注(自动对正大小)
  185. */
  186. this.AddSecHandSignAdjust=function()
  187. {
  188. var secSignObj = this.webSignObj.AddSecSignOcx("SecHandSignID",20,20);
  189. secSignObj.WebSignInfo = this.checkPrintForm(); //要Web签章验证的信息;
  190. this.webSignObj.AddSecHandSign(secSignObj,_self.user.name,0,false,false,true,true,null,true,50);
  191. };
  192. /**
  193. * 增加输入WEB批注(自动对正大小)
  194. */
  195. this.AddSecKeyBoardComment=function()
  196. {
  197. var secSignObj = this.webSignObj.AddSecSignOcx("SecKeyBoardCommentID",20,20);
  198. secSignObj.WebSignInfo = this.checkPrintForm(); //要Web签章验证的信息;
  199. this.webSignObj.AddSecKeyBoardComment(secSignObj,_self.user.name,0,false,false,true,false);
  200. };
  201. /**
  202. * 输入有提示的本地WEB签章批注
  203. */
  204. this.AddSecSignFromLocal=function(isAddComment)
  205. {
  206. var secSignObj = this.webSignObj.AddSecSignOcx("SecSignFromLocalID",20,20);
  207. secSignObj.WebSignInfo = this.checkPrintForm(); //要Web签章验证的信息;
  208. this.webSignObj.AddSecSignFromLocal(secSignObj,_self.user.name,'',true,1,false,false,true,true,null,isAddComment);
  209. };
  210. /**
  211. * 输入有提示的远程(URL)WEB签章批注
  212. */
  213. this.AddSecSignFromURL=function()
  214. {
  215. var secSignObj = this.webSignObj.AddSecSignOcx("SecSignFromURLID",20,20);
  216. secSignObj.WebSignInfo = this.checkPrintForm(); //要Web签章验证的信息;
  217. //secSignObj.PositionTagId = "JiaFanSpan";//定义印章加盖的位置 JiaFanSpan 一般为DIV
  218. this.webSignObj.AddSecSignFromURL(secSignObj,_self.user.name,
  219. 'http://www.ntko.com/admin/ocv14_test.nsf/vwSigns/2C0B608DD5844CA848256E46000A4C3D/$file/zhang_hetong.gif.esp?openelement',
  220. 2,false,false,true,false,"11111111",false);
  221. };
  222. /**
  223. * 从服务器中选印章对表单进行签章
  224. */
  225. this.AddSecSignFromService=function(){
  226. var strxy = this.getXy();
  227. if( strxy!="" && (strxy.split("&").length==2)){
  228. var arrys = strxy.split("&");
  229. // alert("X:"+arrys[0]+" Y:"+arrys[1]);
  230. var url = __ctx + "/platform/system/seal/dialog.ht";
  231. var winArgs = "dialogWidth=800px;dialogHeight=600px;help=0;status=0;scroll=1;center=0;resizable=1;";
  232. url = url.getNewUrl();
  233. var that =this;
  234. DialogUtil.open({
  235. height:600,
  236. width: 800,
  237. title : '签章',
  238. url: url,
  239. //自定义参数
  240. sucCall:function(retVal){
  241. if(typeof(retVal)==undefined){
  242. return;
  243. }
  244. if(retVal.fileId.isEmpty()){
  245. return;
  246. }
  247. var signUrl=__ctx + "/platform/system/sysFile/getFileById.ht?fileId=" + retVal.fileId;
  248. try{
  249. var secSignObj = that.webSignObj.AddSecSignOcx("SecSignFromURLID",arrys[0],arrys[1]);
  250. secSignObj.WebSignInfo = that.checkPrintForm();//要Web签章验证的信息;
  251. /*secSignObj.PositionTagId = that.getPosDiv(); //设置印章对其到页面id为handSignPosDivID1的元素
  252. secSignObj.ReSetHTMLPosition(); */
  253. that.webSignObj.AddSecSignFromURL(secSignObj,_self.user.name,signUrl);
  254. }catch(err){
  255. alert("AddSecSignFromService:" +err.name + ": " + err.message);
  256. return -1;
  257. }
  258. }
  259. });
  260. }
  261. };
  262. /**
  263. * 输入有提示的Ekey硬件WEB签章批注
  264. */
  265. this.AddSecSignFromEkey=function()
  266. {
  267. if(this.webSignObj!=null){
  268. /*if(!this.webSignObj.IsEkeyConnected)
  269. {
  270. alert("没有检测到EKEY.请将EKEY插入到计算机!然后点击确定继续.");
  271. return false;
  272. }*/
  273. var secSignObj = this.webSignObj.AddSecSignOcx("SecSignFromEkeyID",20,20);
  274. secSignObj.WebSignInfo = this.checkPrintForm(); //要Web签章验证的信息;
  275. this.webSignObj.AddSecSignFromEkey(secSignObj,_self.user.name,2,false,false,true,true);
  276. }
  277. };
  278. /**
  279. * 输入有提示的Ekey硬件WEB签章批注
  280. */
  281. this.AddSecSignFromEkeyWithSignIndex=function()
  282. {
  283. if(this.webSignObj!=null){
  284. /*if(!this.webSignObj.IsEkeyConnected)
  285. {
  286. alert("没有检测到EKEY.请将EKEY插入到计算机!然后点击确定继续.");
  287. return false;
  288. }*/
  289. var secSignObj = this.webSignObj.AddSecSignOcx("SecSignFromEkeyID",20,20);
  290. secSignObj.WebSignInfo = this.checkPrintForm(); //要Web签章验证的信息;
  291. this.webSignObj.AddSecSignFromEkey(secSignObj,_self.user.name,2,false,false,true,true,null,true,1/*SignIndex*/);
  292. }
  293. };
  294. /**
  295. * 获取所有签章的相关信息
  296. */
  297. this.ShowSignsInfo=function()
  298. {
  299. var objs = document.getElementsByTagName("object");
  300. for(var i=0;i<objs.length;i++)
  301. {
  302. var obj = objs(i);
  303. if(obj.classid == "clsid:AA4B3728-B61C-4bcc-AEE7-0AA47D3C0DDA")
  304. {
  305. var info = "";
  306. info += "SignName="+obj.SignName;
  307. info += ",Signer="+obj.Signer;
  308. info += ",SignUser="+obj.SignUser;
  309. info += ",SignSource="+obj.SignSource;
  310. info += ",SignTime="+obj.SignTime;
  311. info += ",SignSN="+obj.SignSN;
  312. info += ",EkeySN="+obj.EkeySN;
  313. info += ",PrintMode="+obj.PrintMode;
  314. alert(info);
  315. }
  316. }
  317. };
  318. /**
  319. * 清除所有印章
  320. */
  321. this.ClearAllSigns=function() //清除所有印章
  322. {
  323. var objs = document.getElementsByTagName("object");
  324. for(var i=objs.length-1;i>=0;i--)
  325. {
  326. var obj = objs(i);
  327. if(obj.classid == "clsid:AA4B3728-B61C-4bcc-AEE7-0AA47D3C0DDA")
  328. {
  329. obj.Close();
  330. obj.removeNode();
  331. }
  332. }
  333. };
  334. /**
  335. * 是否支持印章对象对表单验证
  336. */
  337. this.AllCheckDocChange=function(mark)
  338. {
  339. var objs = document.getElementsByTagName("object");
  340. for(var i=0;i<objs.length;i++)
  341. {
  342. var obj = objs(i);
  343. if(obj.classid == "clsid:AA4B3728-B61C-4bcc-AEE7-0AA47D3C0DDA")
  344. {
  345. obj.CheckDocChange(mark);
  346. }
  347. }
  348. };
  349. /**
  350. * 保存为本地图片并清除临时文件
  351. */
  352. this.SavePicAsTempFile = function(imgDivid)
  353. {
  354. var objs = document.getElementsByTagName("object");
  355. var signscount = 0;
  356. for(var i=0;i<objs.length;i++)
  357. {
  358. var obj = objs(i);
  359. if(obj.classid == "clsid:AA4B3728-B61C-4bcc-AEE7-0AA47D3C0DDA") //找到一个印章
  360. {
  361. signscount++;
  362. var tempName = obj.SavePicAsTempFile();
  363. alert("第" + signscount + "个章的临时文件:" + tempName);
  364. document.getElementById(imgDivid).src = "";
  365. document.getElementById(imgDivid).src = tempName;
  366. // document.all("tmpimg").src = "";
  367. // document.all("tmpimg").src = tempName;
  368. alert(document.getElementById(imgDivid).src);
  369. // alert("准备删除第"+signscount+"个章的临时文件");
  370. document.getElementById(imgDivid).style.display='block';
  371. obj.ClearTempFile();
  372. }
  373. }
  374. };
  375. /**
  376. * 设定所有印章只读
  377. */
  378. this.setAllsignsReadOnlyMode = function(isReadOnlyMode)
  379. {
  380. var objs = document.getElementsByTagName("object");
  381. for(var i=0;i<objs.length;i++)
  382. {
  383. var obj = objs(i);
  384. if(obj.classid == "clsid:AA4B3728-B61C-4bcc-AEE7-0AA47D3C0DDA")
  385. {
  386. obj.IsReadOnlyMode = isReadOnlyMode;
  387. }
  388. }
  389. };
  390. /**
  391. * 获取要检验的表单数据
  392. */
  393. this.checkPrintForm = function(){
  394. var aryInput = $("input:text,input:hidden,textarea,select");
  395. // var aryInput = $("input:text,input:hidden,textarea,select,input:checkbox,input:radio,span");
  396. this.checkForm='';
  397. for (var i = 0, len = aryInput.length; i < len; i++) {
  398. var tmp = aryInput.get(i);
  399. // var validRule = tmp.validate; //获取自定义属性时,IE8或以下才可以用,IE8以上的都不能稳定获取!
  400. var validRule = tmp.getAttribute("validate"); //获取自定义属性IE7、8、9通用
  401. if ( validRule != null && validRule != '' && 'undefined' != validRule.toLowerCase() ){
  402. var json = eval('(' + validRule + ')');
  403. if(json.isWebSign){
  404. var name = tmp.getAttribute("lablename"); //字段说明名称
  405. if( (name=="")||(name==null)||('undefined'==typeof(name)) ){
  406. var arrys = (tmp.name).split(":"); //tmp.name 固定属性IE7、8、9都可以获取!
  407. name = arrys[arrys.length-1];
  408. }
  409. this.checkForm += name + '=' + tmp.getAttribute("name") +';'
  410. }
  411. }
  412. }
  413. if(this.checkForm.length>0){
  414. this.checkForm = this.checkForm.substr(0,this.checkForm.length-1) //去年最后一个字符
  415. }
  416. return this.checkForm;
  417. };
  418. /**
  419. * 保存签章相关信息
  420. */
  421. this.SaveToServer = function(power)
  422. {
  423. if(power=="w"||right=="b"){
  424. var path= __ctx + "/platform/system/sysFile/saveFileInfo.ht";
  425. var uploadName = this.webSignId +"_pdf"
  426. var params="fileId=" + this.espFileId + "&uploadName="+ uploadName;
  427. var curDate=new Date();
  428. var espName=Math.random()*curDate.getMilliseconds()*10000;
  429. //保存数据到服务器。
  430. var retstr = this.webSignObj.SaveToURL(path,uploadName,params,espName+".info",0);
  431. if(retstr!=""&&('undefined' != typeof (retstr))&& retstr>0){
  432. this.espFileId = retstr;
  433. return retstr;
  434. }else{
  435. return "";
  436. }
  437. }
  438. };
  439. /**
  440. * 加载签章相关信息
  441. */
  442. this.loadFileInfo = function()
  443. {
  444. if((this.espFileId!="")&&(this.espFileId!=null)&&('undefined' != typeof (this.espFileId))){
  445. var path= __ctx + "/platform/system/sysFile/getFileById.ht?fileId=" + this.espFileId;
  446. this.webSignObj.LoadFromURL(path);
  447. if (0 != this.webSignObj.StatusCode) {
  448. return false;
  449. }
  450. }
  451. };
  452. /**
  453. * 鼠标获取位置
  454. */
  455. this.getXy=function()
  456. {
  457. var mousePosX = document.getElementById('mousePosX').value;
  458. var mousePosY = document.getElementById('mousePosY').value;
  459. var str = mousePosX +"&"+ mousePosY;
  460. document.getElementById('mousePosX').value = '50';
  461. document.getElementById('mousePosY').value = '50';
  462. if(mousePosX=='50' && mousePosY=='50'){
  463. if(confirm("当前签章将保存位置:横坐标("+mousePosX+"px),纵坐标("+mousePosY+"px)!确认不需要更改吗?")){
  464. return str;
  465. }else{
  466. alert("请通过双击鼠标左键确定将选择的印章位置,再进行签章!");
  467. return "";
  468. }
  469. }else{
  470. return str;
  471. }
  472. };
  473. this.getPosDiv = function(){
  474. if($("#divPos").length<1){//还没有就新建
  475. $("body").append('<div id="divPos" style="position:absolute;left:0px;top:0px;border:1px solid red;width:10px;height:10px;">测试嘿嘿嘿</div>');
  476. }
  477. return "divPos";
  478. };
  479. };