【IE扩展】增加菜单项
作为一个可扩展的系统,IE提供了优良的可扩展性,它的步骤可以很复杂,也可以很简单。这里我就以一个简单的示例来演示一下如何为IE增加一个简单的扩展。
首先,我们需要向注册表中添加一个扩展键值,通过这个预置的外部接口,我们可以添加必要的参数和IE进行交互。这里我们要求我们的IE版本起码在IE5之后。
生成GUID:
可以利用Visual Studio的工具->创建GUID工具创建GUID。
添加注册表项:
方法一:打开注册表编辑器(在“开始”->“运行”输入“regedit”(不含引号),确定进入),找到下列键值:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Extensions
其中HKEY_CURRENT_USER部分可以替换为HKEY_LOCAL_MACHINE,这样的替换将导致后续的操作将作用于本机的所有用户,而HKEY_CURRENT_USER则只影响本机的当前用户。
在Extensions节点上添加新项,其名称即为之前所创建的GUID。在该GUID下创建相应的项,这些项的名称和内容按下表所示:
MenuText:这个值将被用于菜单名的显示。
MenuCustomize:这个值可选,用于指示菜单项应该出现在哪?如果要出现在“帮助”旗下,那就设置它为“help”,设置成别的选项或者压根不设置都将导致这个菜单被放置到“工具”一栏中。
MenuStatusBar:这个值可选,用于在菜单项被选择的时候在状态栏中会提示相关的提示信息。
按动菜单必然需要触发点事件,对IE的扩展需要更加方便的方式,而不是重新修改IE的代码再编译,这通常也不被允许。IE提供的拓展方式有3种,执行一个COM组件、执行一段脚本或者是执行一个可执行程序。而这些需要我们设置相应的值,它们分别是:
Script:我们可以在本地磁盘创建一份脚本文件(根据我的经验,可以是*.html,*.htm,*.js等可以执行脚本的文件类型),然后将它们的路径作为该项的值。例如:file://C:\plug-in.htm
Exec:与Script基本类似,这里要求添加一个exe文件的路径作为该项的值。
以上各项可以并存,运行该菜单的时候就可以执行相应代码了。
这里我以Script为例,做一个字数统计的示例。
添加脚本代码:
var win = external.menuArguments;
var document = external.menuArguments.document;
function OnContextMenu(){
//MSDN : selection Object
//http://msdn.microsoft.com/en-us/library/ms535869(VS.85).aspx
var range = document.selection.createRange();
var str = new String(range.text);
var length = str.length;
var output = "";
if(length == 0)
output += "请选择一段文字!\n";
else {
output += "文字的长度为 = " + length + "。\n";
//calculate how much this subString in the document
var displayTime = document.body.innerText.split(str).length-1;
output += "该文本在该页面中一共出现" + displayTime + "次。\n";
}
showMessage(output);
}
function showMessage(message){
alert(message);
}
OnContextMenu();
</script>
添加脚本代码路径:
名称Script,值http://www.cnblogs.com/volnet/admin/file:///C:/plug-in.htm(把文件放在C盘之下),并设置ClSID和MenuText值
运行后选择文本,然后在菜单中找到添加项。
方法二:除了使用注册表编辑器进行手动添加,我们也可以通过*.reg文件直接向注册表导入该项目,保存下面的文本为<filename>.reg,并运行它们即可,根据上文设置相应的值。
@=""
"MenuStatusBar"="Calculate the count of charactor in the selected word."
"MenuCustomize"="help"
"MenuText"="Word Count"
"CLSID"="{1FBA04EE-3024-11d2-8F1F-0000F87ABD16}"
"Exec"="file://E:\\MyCSharpProject\\JavaScript\\HelloWorld.exe"
"Script"="file://E:\\MyCSharpProject\\JavaScript\\plug-in.html"
"ClsidExtension"=""
以上步骤完成了对IE的菜单进行扩展。
同样类似的还有Standard Context Menu(标准上下文菜单)。使用同样的脚本我们可以添加标准上下文菜单。这一步骤仅需我们的浏览器为IE4.0以上即可(之前的步骤要求5.0以上)
我们经常见到在页面中右键,有迅雷下载,添加到QQ表情等,你知道他们是怎么制作的吗?在注册表打开以下键值:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt
在其下添加脚本文件(和菜单项不同的是它只允许脚本形式而不允许COM对象和可执行文件。)
该项的默认值填写执行脚本的路径,如http://www.cnblogs.com/volnet/admin/file:///C:/plug-in.htm
再添加DWORD值,键名为Contexts,其值是由一组二进制标识符通过“位或”的方式叠加的。下表标明它们的含义。
0x02 CONTEXT_MENU_IMAGE 只有图像才允许显示该菜单。
0x04 CONTEXT_MENU_CONTROL form才允许显示该菜单。
0x08 CONTEXT_MENU_TABLE tables才允许显示该菜单。
0x10 CONTEXT_MENU_TEXTSELECT 选中文本才允许显示该菜单, 也包括选中区域内的图像。
0x20 CONTEXT_MENU_ANCHOR 链接才允许显示该菜单,不包括链接的图像以及图像地图。
0x40 CONTEXT_MENU_UNKNOWN 在以上任何一个提到的可能性以外(这通常不可能)。
好了,下面让我们添加之前的Word Count的代码。
地址不变,我们要求在HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt下创建“字数统计”,在默认中添加C:\plug-in.htm,右键新建DWORD值,名称Contexts,类型REG_DWORD,数据0x30(由0x10|0x20得出,表示我们只在选取文本同时也包括链接文本的时候,才显示“字数统计”菜单)。
同理,我们也可以用*.reg的文件来描述上述过程。
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\字数统计]
"Contexts"=dword:00000030
@="E:\\MyCSharpProject\\JavaScript\\plug-in.html"
至此我们已经将脚本plug-in.htm正确部署到IE中去了。
您是否见过如下图所示的工具栏呢?(IE8中,IE6之前的版本是以图标栏的方式来显示)
之前的步骤并不会让我们添加该选项。但是却为我们完成了很多的工作。下面我们只需要再修改注册表即可。
在对应的GUID下(...\Extension\<GUID>\)添加ButtonText,设置它的值为“字数统计”。
前面还有个漂亮的图标呢!自己制作一个图标或者在系统中找到一个漂亮的图标(*.ICO)或者在*.dll中引用图标资源形如:"example.dll, <your icon name>.ico"即可。在对应GUID下添加Icon,它的值为*.ICO的完整路径。另添加一个HotIcon,方法与Icon一致。二者的区别是HotIcon是指表示在鼠标移到自定义按钮上时,按钮上所显示的图标。而Icon则是正常显示的风格。但是在IE8下似乎没有什么特别的。不知道IE6下是否会有所区别。
有一个可选的Default Visable,在<GUID>下添加Default Visable,设置它的值为“Yes”或“No”。言下之意就是是否默认显示。但是这里要注意一点就是如果通过工具栏的“自定义工具栏”进行了设置,那么该项将无效。
另外有个可选的Lang####,其中####为语言编号。比如简体中文为0x0804(可以查阅这里),则为Lang0804。
在执行命令上,上面提到的三种均被支持(COM对象的调用(如常见的“Gears设置”)、Script调用(如本示例的“字数统计”)、还有Exec的方式。)另外还有Explorer Bar的显示控制(如“Research”)
方式:在<GUID>下添加CLSID或者修改CLSID为:{E0DD6CAB-2D10-11D2-8F1A-0000F87ABD16}指定调用CLSID_Shell_ToolbarExtBand扩展,之前调用的是CLSID_Shell_ToolbarExtExec类。然后添加一个项为BandCLSID,它的值为代显示的Explorer Bar的GUID,如果您没有这么一个Bar,可以先用Research的GUID代替一下:{FF059E31-CC5A-4E2E-BF3B-96E929D65503}。
发现一个网站可以自助建IEToolbar:(PDF文件)
https://files.cnblogs.com/volnet/how_make_toolbar_in_ieshow.net.rar
posted on 2008-09-26 02:18 volnet(可以叫我大V) 阅读(4314) 评论(3) 编辑 收藏 举报