Dreamweaver插件开发系列 (PART-1)

Dreamweaver相信好多人都用过,但开发extension的估计不多。当初帮别人做一个cms的extension demo,在网上找资料,发现一个简单的例子都被买3.xx欧,内心极其的愤怒,怎么能这么没有共享精神呢?这促使我写个入门介绍,帮那些有深入dreamweaver想法的人开个头。万事开头难!

本篇文章就是来简单介绍一下dreamweaver extension,带你入门,至于精通,还依赖你的更多探索。

1 what is  dreamweaver extension? (dreamweaver以后简称dw)

dw extesion是dw提供的一种扩展机制,也就是给一个机会让你Hook到dw内部去,比如它的菜单,对话框,操作等。DW extension存在很多年了,但一直没什么人用,那是因为设计这个dw extension的人绝对没有经过深思熟虑,它是在大牌软件里我见过最垃圾的一种扩展机制,大家主要是喜欢他的html editor和render。

有心人如果打开过dw安装目录,就会发现很多的.js和.html文件,那些不是什么用户手册,他是dw构成的基础。整个Dreamweaver就是建立在这种extension基础上的,但因为它对外暴露的东西很少,所以dw内部的人用的滚瓜烂熟,你却摸不着头脑。狭义来说,extension = HTML+JS。

2 第一个extension: hello world

有些东西讲来讲去,不如一个动手来得实在。现假设你用的dw版本是mx2004--cs4。

在继续例子之前,首先要有一个触发点,也就是菜单。定位到dw安装目录,打开configuration/menus/menu.xml,在倒数第二个menubar元素的最后一个节点,如下图:

       


        
< menuitem  mmstring:name ="menus/DWMenu_Help_About"  command ="dw.showAboutBox()"  enabled ="true"  platform ="win"  id ="DWMenu_Help_About"   />
    
</ menu >
         
<!-- 新加的菜单 -->
   

    
<menu name="Test" id="LIFESTING_TEST">
         <menuitem name="Hello" file="Menus/Test/helloworld.htm" id="lifesting_hello_world"/>
    </menu>      

</ menubar >
<!--  Repository view context menu. Shares strings with the VCS menu of the local file view.  -->
< menubar  id ="DWRepositorySiteFilesContext" >
    
< menu  mmstring:name ="menus/DWContext_RepositorySite"  id ="DWContext_RepositorySite" >
     ....略

    
</ menu >
</ menubar >
</ menus >


这个配置就是告诉dw在主菜单加一个菜单test,里面包含一个菜单项hello,它包含一个文件属性helloworld.htm,这代表extension的界面。在menu.xml所在的目录下建一个test目录,里面放一个如下的helloworld.htm

<! DOCTYPE HTML SYSTEM "-//Adobe//DWExtension layout-engine 10.0//dialog" >
< HTML >
< HEAD >
< Title > Hello World </ Title >
< SCRIPT  SRC ="hw.js" ></ SCRIPT >
</ HEAD >
< BODY >
< form  name ="fm1" >
< input  type ="text"  value ="Say Hi"  name ="btn_hi" >
</ form >
</ BODY >
</ HTML >


第一行我们没见过很正常,稍后会讲到。往下包含一个script hw.js,在dw extension中,javascript就是定义extension的行为,在helloworld.htm所在目录建一个如下的 hw.js

function  canAcceptCommand()
{    
    
return   true ;
}

function  commandButtons(){
    
return   new  Array( " Ok " " sayHi() " " Cancel " " window.close() " );
}
function  sayHi()
{
    window.alert(
" Hi,  " + document.fm1.btn_hi.value);
    
}


非常简单的javascript,alert一个"hi,XXX".

重新启动 dw,就会看到效果了。dw extension跟网页编程一样简单,对吧?但为什么可以这样?



3 extension的内部机制

extension由htm+js构成,但dreamweaver真真切切是一个windows native程序,所以这中间必定有一个东西来把这两者连接起来。在dw中,对应html和js的连接器分别是DW Render和Javascript Interpreter。 当你完成一个网页,使用DW预览的时候,DW Render就把HTML render成为了window,就如浏览器所做的那样,这种render没法定制,是DW的核心机密:)。但DW却使用了一个开源的Javascript interpreter: SpiderMonkey,它负责解析如hw.js所写的javascript。它对dw extension开发者来说,是公开的,我们通过编写spidermonkey扩展,可以完成 标准html和js干不了的事情。事实上,dw就是这么干的,比如调用jvm,访问网络,打开外部程序等,基本都放在dw安装目录下的configuration/jsextensions/*.dll里面

Part2 将会通过改造hw.js里面的sayHi,弹出的对话框将会告诉 当前系统内存的大小,如

function  sayHi()
{
    
var  mem_size  =  localSystem.getMemorySize();
    window.alert(
" Size is  " + mem_size);
}


localSystem与window不同的是它是我们自己加进去的Javascript 对象。

PART 2 待续

80多个不常见的符号插件.mxp 80多个国家的一个下拉菜单.mxp addToFavoritesBH.mxp Adv HTML Edit.mxp Allaire为ColdFusion开发插件.mxp ASP生成HTML 1.2.0修正版.mxp ASP生成HTML插件.mxp ASP图片随机显示插件.mxp ASP无组件文件上传插件2.0版本.mxp Atomz.com的搜索插件.mxp Banner交换系统插件.mxp Chromeless Windows.mxp Conversa Web CDK技术.mxp coolborder生成很Cool的表格边界.mxp disable_view_source.mxp Dreamweaver CS3 Spry 1.6插件更新包.mxp FCKeditor在线编辑器插件.mxp Flash效果文字插件.mxp IE4以上的转场效果.mxp IE标题栏的文字滚动插件.mxp insert_greeting.mxp jump menu插件.mxp Marquee.mxp Meta扩展插件.mxp MX183945_compare_fields.mxp MyComputer.com提供的一套站点访问跟踪系统插件.mxp Oblog 3.0 模板标记插件.mxp OLEDB连接插件.mxp PHP的include和require插件.mxp PHP格式化日期插件.mxp php和mysql连接的插件.mxp PHP检查表单插件.mxp PHP区域横向重复插件.mxp PureUpload2.09.mxp qqMailEditor.rar(Pic_Asp).rar qqMailEditor.rarphp(utf8).rar QueryBuilder.mxp Real播放器插件.mxp SinaEditor.rar UBBCode自动生成UBB插件.mxp Web Photo Album的command2.0版本.mxp YUI_TreeView.mxp 按照W3C的HTML4.01的语法测试HTML标准插件.mxp 表单验证插件.mxp 表格行颜色交替插件.mxp 层变换特效2.0.mxp 层动画效果插件.mxp 层或框架中调用URL文件插件.mxp 插入mtx、mtz格式等Viewpoint Media 3D文件插件.mxp 插入PHP代码插件.mxp 创建一个index页面插件.mxp 创建一个JustSo风格的相册插件.mxp 打字效果文字插件.mxp 单元格平均分布插件.mxp 弹出无边小窗口插件.mxp 弹出注释插件.mxp 导出EXEL格式插件.mxp 导出WORD插件.mxp 地址栏图标插件.mxp 调用CSS文件插件.mxp 动态替换CSS插件.mxp 多词搜索插件.mxp 二级下拉菜单插件.mxp 高级HTML编辑器2.01版.mxp 高级表单验证.mxp 高级弹出窗口插件.mxp 高级随机图片插件.mxp 高级显示区域插件.mxp 高级组合搜索插件.mxp 高亮显示搜索的关键字.mxp 格式化文本插件(维持段落不丢).mxp 根据背景控制表格尺寸插件.mxp 根据不同客户端加载不同CSS文件插件.mxp 固定层插件(二).mxp 固定层插件(一).mxp 关闭弹出窗口插件.mxp 滚动条效果插件.mxp 滚动条主题颜色管理器.mxp 很COOL的可变大小的层插件.mxp 横向数据重复的插件.mxp 换行显示搜索高亮度文本插件.mxp 记录集跳转菜单插件.mxp 检查新元素插件.mxp 检验控制组件插件.mxp 简约版高级分页插件.mxp 截取字符长度.mxp 酷酷的表格边框插件.mxp 连接到上一个页面连接插件.mxp 模板菜单扩展插件.mxp 区域横向重复.mxp 全屏窗口插件.mxp 日期选择(日历版)插件.mxp 删除数据弹出确认对话框.mxp 商用版分页插件.mxp 上下滚动区域插件.mxp 收藏夹图标插件.mxp 树形折叠插件.mxp 数学符号插件.mxp 搜索结果分页插件.mxp 随浏览器窗口变化背景图案插件.mxp 套常规通用的表单插件.mxp 条件式显示区域插件.mxp 同时删除多项记录.mxp 统计在线人数(UD)修正版.mxp 图片载入状态插件.mxp 图形计数器.mxp 文档元素树型显示插件.mxp 无组件ASP上传文件双字节文件名插件.mxp 显示IP对应地区插件.mxp 显示在线登录会员名单.mxp 限制文本框内字符长度插件.mxp 新闻点击数记录.mxp 新增14个框架组合插件.mxp 颜色渐变的文字.mxp 页面载入效果插件.mxp 隐藏替换无法显示图片插件.mxp 在线播放媒体插件.mxp 站点计数器插件.mxp 指定页面前进后退次数插件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值