最近开发浏览器插件有点上瘾,先开发了一个FF(火狐)浏览器插件,后来又开发了一个谷歌浏览器的插件,还是不觉得不过瘾,这次要尝试开发一个粗糙的IE浏览器插件,最终实现在一键实现订餐,一键取消订餐操作。
凡事知道就好做了,只是这次走了些弯路。网上只要提到IE插件开发的无不提到Com,BHO等等概念,为此我还下载了vs2010,安装platform sdk,并到codeproject下载N个例子进行研究,虽然已经好几年不用vs2010了,也不曾在写com了,还好有点底子,基本能看懂,了解了下BHO的原理,同时了解了com的一些东西,也算有些收获。不过越看越觉得我的不需要这么麻烦,不需要BHO处理各种消息状态。我只需要在IE上增加一个按钮,点击这个按钮,调用我写的js触发一个操作,并给出提示即可。走点弯路没关系,下次也许用的到。
现在改变策略,既然要增加按钮,触发操作。那到internet explorer development上找帮助就可以了,还真找到一篇文章,关于如何add menu items。仔细阅读了解到,IE上的按钮是通过增加注册表项来完成了,随即生成了两个注册表项
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InternetExplorer\Extensions\{5D78A592-AA1A-4E6F-A808-9214B4A7222A}] "CLSID"="{5D78A592-AA1A-4E6F-A808-9214B4A7222A}" "MenuText"="我要订餐" "MenuCustomize"="我要订餐" "MenuStatusBar"="我要订餐" "ClsidExtension"="" [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InternetExplorer\Extensions\{BA6C7C63-9EFC-4DA1-B5D9-666A624F4831}] "CLSID"="{5D78A592-AA1A-4E6F-A808-9214B4A7222A}" "MenuText"="取消订餐" "MenuCustomize"="取消订餐" "MenuStatusBar"="取消订餐" "ClsidExtension"=""
导入注册表项,重启IE,在工具中看到这两个选项,我要订饭和取消订饭。只是点击这两个menu item没有任何响应,原因是我们没有给这两个menu item增加增加响应事件。很简单在注册表项中增加一个exec即可,我们要使用之前的js,那就需要写一个页面来执行这个js,比如写如下代码
<html> <head> <metahttp-equiv="Content-Type" content="text/html;charset=utf-8"> <title>订餐系统</title> <meta name="keywords"content=""> <scriptsrc="./dingcan.js"></script> </head> <bodyonload="DingCan.loginAndDingCan()"> <span id="dcdingcan">正在订餐中...</span> </body>
如果我们的exec这样写
"Exec"="file:///D:/Program%20Files/dingcan/dingcan.html"
IE会重新打开一个窗口,用户体验不好,这里我们用点小技巧,把.html修改成.hta后缀,整个事件清净了,这样设置之后,点击按钮后,是这个样子的有点大,
在html增加如下代码,设置窗口大小,
<scriptlanguage="javascript"> window.resizeTo(200,100) </script>
这次是这样的,完美了
Hta内容补充:HTA 全名为 HTMLApplication ( HTML 全名为 Hyper Text Markup Language ),HTA 为 HTML 应用程序。HTA格式的文件不需要在浏览器中执行,windows可以直接执行此程序。更详细的内容可以参考HTML Applications:
http://msdn.microsoft.com/en-us/library/ms536471%28v=VS.85%29.aspx
IE插件实现的很猥琐,只不过他实现了我要的功能。这几个扩展都是皮毛,没有什么高深技术含量,只是希望对大家有所帮助,也希望消除做浏览器扩展的不自信。
参考资料
Add menu items http://msdn.microsoft.com/en-us/library/aa753591(v=VS.85).aspx
Internet Explorer Development http://msdn.microsoft.com/en-us/library/bb188743.aspx