选择显示字体大小

教程/dreamweaver/高级 深入dreamweaver插件的奥秘(5)

3.command插件的编写

  1. command插件的简介
  command命令的功能相当强大,可以操作当前文档、所有打开的文档,甚至于所有驱动器上的html文档,可以插入、删除、重排所有的html标签的属性,以及处理注释和文本等等强大功能。

  2.command插件的工作原理
  command插件的作用流程如下:

1如果定义了canacceptcommand()函数,dreamweaver就调用,检测所选择的内容是否适合这个command,如果canacceptcommand()返回false,那么dreamweaver的command菜单里的对应菜单项是灰色的,表示不适合执行这个command
2用户选择某command命令,或者通过dw.runcommand()函数调用
3如果定义了receivearguments()函数,就调用它,处理用户输入的参数
4如果定义了commandbuttons()函数,就调用它,显示特定的按钮,并且赋予每个按钮特定的执行代码
5dreamweaver检测command代码里是否存在form标签,如果存在,首先调用windowdimensions()函数,计算参数选择对话框的尺寸,如果windowdimensions()没有定义,dreamweaver自动定义对话框的尺寸;最后弹出参数对话框
6如果<body>标签中存在onload句柄,dreamweaver就执行它,当然如果没有对话框,这一步不执行
7用户选择参数
8用户点击特定的按钮时,dreamweaver执行赋予相应按钮的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.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

design by redidea

email:redidea@hotmail.com</font></td>
</tr>
</table>
</form>
</body>
</html


  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插件的编写注意事项

  1、所有将来插入的代码,都必须在js文件里用函数转化为字符串,然后返回,用按钮触发的函数插入到当前文档;

  2、command命令装入dreamweaver后,会在command菜单里找到;

  3、另外一种方法是,做成object插件,然后通过dreamweaver.popupcommand()函数调用已经编好的command

  5.command常用函数列表

  commandbuttons() // 定义command对话框按钮
  canacceptcommand() // 规定能接受command的对象
  initializeui() // 初始化用户界面
  windowdimensions() // 定义参数对话框的尺寸
  sethandler(obj,eventname,fncall, optstr) // 设置特定对象的事件句柄


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons