深入DW插件的奥秘(5) |
||||||||||||||||
三、进阶篇 Command插件的编写 1. Command插件的简介 Command命令的功能相当强大,可以操作当前文档、所有打开的文档,甚至于所有驱动器上的Html文档,可以插入、删除、重排所有的Html标签的属性,以及处理注释和文本等等强大功能。 2.Command插件的工作原理 Command插件的作用流程如下:
3.Command插件制作实例 3.Command插件制作实例 在熟悉Command插件的工作原理后,我们也可以开发自己的Command插件了! Example 3:一个状态栏闪烁的Command插件编写 Ex3.1 具体的效果就是本页状态栏的样子,具体Javascript代码如下 <script language="javascript"> <!-- var FlashMsg = "Command插件编写实战"; var speed = 700; var control = 1; function flash() { if (control == 1) { window.status=FlashMsg; control=0; } else { window.status=""; control=1; } setTimeout("flash()",speed); } window.onload=flash; // --> </script> Ex3.2 代码分析 首先,确定用户定制参数,用户需要定制的参数有: 1、FlashMsg,就是状态栏的显示文本; 2、speed,就是闪烁速度,单位毫秒; 其次,我们发现有一个window.onload=flash事件,我们必须在网页的body标签中加上onload=flash()事件 Ex3.3 开始设计 Ex3.3 开始设计 Ex3.3.1 设计Flash Message.htm文件 本文件要完成的任务是传递两个参数:一个文本参数和一个时间参数,所以需要一个form标签,两个input输入框,具体代码如下: <html> <head> <!--注释:插件名称--> <title>Flash Message</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <!--Command插件的javascript函数--> <script src="FlashNav.js"></script> </head> <body> <!--注释:用于参数传递的form--> <form name="theForm" method="post" action=""> <table width="300" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="81">显示字符串:</td> <td width="169"> <!--注释:字符串输入框--> <input type="text" name="myMsg" size="30"> </td> </tr> <tr> <td width="81">闪烁速度:</td> <td width="169"> <!--注释:闪烁速度输入框--> <input type="text" name="mySpeed" size="6"> (单位:毫秒) </td> </tr> <tr align="right"> <td colspan="2"> <hr noshade width="100%" size="2"> <!--注释:版权栏--> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">2001.1.15<br> Design by Redidea<br> Email:Redidea@hotmail.com</font></td> </tr> </table> </form> </body> </html> Ex3.3.2 设计Flash Message.js文件 Ex3.3.2 设计Flash Message.js文件 本文件要完成的任务是:接受用户的参数,插入一段Javascript代码,然后给body标签加上onload=flash()事件 具体代码如下: //注释:插件对话框按钮设置,并且赋予每个按钮特定的执行函数 function commandButtons(){ return new Array("确定","putRedIn()","取消","window.close()") } //注释:按钮"确定"的执行函数 function putRedIn(){ InsertOnLoad(); InsertRedScript(); window.close(); } //注释:执行插入javascript的函数 function InsertRedScript(){ var Msg="\"" + document.theForm.myMsg.value +"\""; var Speed=document.theForm.mySpeed.value; var RedScript="//Flash Message by Redidea \r"; RedScript+="var FlashMsg ="+ Msg + ";\r"; RedScript+="var speed ="+ Speed + "; \r"; RedScript+="var control = 1; \r"; RedScript+="function flash(){\r"; RedScript+=" if (control == 1)\r"; RedScript+=" {\r"; RedScript+=" window.status=" + Msg +";\r"; RedScript+=" control=0;\r"; RedScript+=" } \r"; RedScript+=" else \r"; RedScript+=" { \r"; RedScript+=" window.status=\"\"; \r"; RedScript+=" control=1; \r"; RedScript+=" }\r"; RedScript+=" setTimeout(\"flash()\","+ Speed +"); \r"; RedScript+="} \r"; //注释:获得javascript代码的插入位置 RedPageDom=dreamweaver.getDocumentDOM("document"); theScriptNodes=RedPageDom.getElementsByTagName("SCRIPT"); RedHeadNode=RedPageDom.getElementsByTagName("HEAD"); isThere=RedHeadNode.item(0).innerHTML.indexOf("Flash Message by Redidea")!="-1"; if (isThere) { } else{ if(theScriptNodes=="") { RedHeadNode.item(0).innerHTML=RedHeadNode.item(0).innerHTML+"<script language=\"Javascript\"> \r"+RedScript+"\r</s"+"cript>"; } else{ theScriptNodes.item(0).innerHTML=theScriptNodes.item(0).innerHTML+RedScript+"\r"; } } } //注释:设置特定对象的事件句柄 function setHandler(obj,eventName,fnCall, optStr) { var eventStr,fnName,fnArray=new Array(),i=0; eventStr = obj.getAttribute(eventName); if (eventStr) { fnName = fnCall.substring(0,fnCall.indexOf("(")); fnArray = dreamweaver.getTokens(eventStr,";"); for (i; i<fnArray.length; i++) if (fnArray[i].indexOf(fnName+'(') != -1 && (!optStr || fnArray[i].indexOf(optStr) != -1)) break; } if (fnArray.length>0 && i==fnArray.length && fnArray[i-1].toLowerCase().indexOf("return ")==0) { fnArray[i] = fnArray[i-1]; i--; } fnArray[i] = fnCall; obj.setAttribute(eventName,fnArray.join(";")); return true } //注释:将onload事件赋予body标签 function InsertOnLoad(){ var AddOnload="flash()"; var bodyNode = dreamweaver.getDocumentDOM('document').body; setHandler(bodyNode,"onload",AddOnload); } 4.Command插件的编写注意事项 4. Command插件的编写注意事项 1、所有将来插入的代码,都必须在js文件里用函数转化为字符串,然后返回,用按钮触发的函数插入到当前文档; 2、Command命令装入Dreamweaver后,会在Command菜单里找到; 3、另外一种方法是,做成Object插件,然后通过dreamweaver.popupCommand()函数调用已经编好的command 5.Command常用函数列表 commandButtons() // 定义command对话框按钮 canAcceptCommand() // 规定能接受Command的对象 initializeUI() // 初始化用户界面 windowDimensions() // 定义参数对话框的尺寸 setHandler(obj,eventName,fnCall, optStr) // 设置特定对象的事件句柄 Behaviors插件的编写 |