RSS 2.0 Feed
2005-02 Entries
摘要:BHO简介:     BHO就是Browser Helper Object. 意思就是IE的插件..     这里有一篇介绍. http://www.microsoft.com/mind/0598/browhelp.asp     更多的控制可以参考: http://msdn.microsoft.com/workshop/browser/ext/extensions.asp     BHO关联原理 (BHO关联的是SHDOCVW,也就是说不只关联IE,下面全部用IE来说明)     1.IE的窗口打开时,先寻找SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\ 这里的对应的是CLSID     2.IE根据CLSID创建 BHO 对象,并且查找 IOleObjectWithSite 接口. (这个接口非常简单,只有SetSite和GetSite两个方法)     3.IE把IWebBrowser2传到 BHO 的 SetSite 方法     4.窗口关闭时,IE把 null 传到 BHO 的 SetSite 方法.       也就是说,如果你要做一个BHO,那么要做以下几个步骤     1.创建 COM 类型, 实现 IOleObjectWithSite     2.在 SetSite 的时候, 得到IWebBrowser2 , 并且进行自定义的初始化 . (一般是关联IWebBrowser2的事件)     3.注册COM类型,并且关联到SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\   OK , 下面来说说如何用 DotNet 做到这点 . 我这里有一个例子程序,是用 VS.NET2003 写的. 里面有一个 _steps.txt 解析了具体的过程.   [ 下载地址http://www.lostinet.com/files/netbho.rar ]   要测试这个例子,你只需要编译这个工程,然后执行NetBHO.reg . 再重新打开IE就OK了.   _steps.txt 的内容为 新建 NetBHO 解决方案和工程 添加对 COM - Microsoft Internet Controls 的引用 (SHDocVw) 添加对 GAC - Microsoft.mshtml 的引用 (Microsoft.mshtml) 添加对 GAC - System.Windows.Forms 的引用 (用于调试) 关闭 vs.net 运行cmd,cd到项目文件夹下 执行 sn -k netbho.snk ildasm obj/Interop.SHDocVw.dll /output:obj/shdocvw.il ilasm obj/shdocvw.il /dll /key=netbho.snk /resource=obj/shdocvw.res /output=obj/Interop.SHDocVw.dll /quiet copy......[阅读全文]

posted @ | Feedback (90) | Filed Under [ DotNet Browser ]

摘要:在FireFox下编写事件处理函数是很麻烦的事.因为FireFox并没有 window.event . 如果要得到 event 对象,就必须要声明时间处理函数的第一个参数为event.所以为了兼容IE与FireFox,一般的事件处理方法为:btn.onclick=handle_btn_click;function handle_btn_click(evt){    if(evt==null)evt=window.event;//IE    //处理事件.}对于简单的程序,这不算麻烦.但对于一些复杂的程序,某写函数根本就不是直接与事件挂钩的.如果要把event传进该参数,那么所有的方法都要把event传来传去..这简直就是噩梦.下面介绍一个解决这个麻烦事的方法,与原理.JScript中,函数的调用是有一个 func.caller 这个属性的.例如 function A(){    B();}function B(){    alert(B.caller);}如果B被A调用,那么B.caller就是A另外,函数有一个arguments属性. 这个属性可以遍历函数当前执行的参数:function myalert(){    var arr=[];    for(var i=0;i阅读全文]

posted @ | Feedback (25) | Filed Under [ Browser AspNet ]

摘要: 你的程序支持 IIS6 - Web Garden 吗?   很就没有更新BLOG了呵呵。 刚过来深圳,时间都是乱来的~~~ 今天帮客户搞定一个部署上的问题,花了我半天的时间。。555。   后来才发现原来是IIS6 Web Garden的问题。   IIS6 Web Garden 指的是一个应用程序可以成多个进程(w3wp.exe)来执行,一次请求使用其中的一个。用这个的主要目的是提高程序的可用性。当其中一个进程发生错误,那么也不会影响其他进程。发生错误的进程可以根据规则关闭,而其他的进程则可以继续工作。   可惜不是每个应用程序都支持Web Garden的。 例如我做的那个就不是。   一般来说 , 不支持 Web Garden 的原因是各应用程序的内存状态是不同的。虽然是访问同一个网站 , 当访问第一个进程时,进程的内存如果纪录了某些重要的信息,而当访问第二个进程的时,却无法再得到那些信息时,那么程序就不一定能运行正常,或者会发生错误。   所以,一般使用 InProc HttpSessionState / HttpApplicationState / 静态变量来储存关键信息 的程序是不支持 Web Garden的。另外平时说Session信息丢失,也和这个有关。一般很多程序都使用Cache来储存临时数据,但如果某些被修改或删除的数据没有在该进程的Cache中得到更新,那么也会很容易导致程序出错。 如果你的程序用上面说的方法,并且在Windows2003/IIS6中发生奇怪的错误,那么请检查一下Web Garden的设置。 如果你希望应用程序支持Web Garden,甚至是支持集群,那么最简单的办法就是,尽量用Cookie来纪录登陆信息,以及所有的数据获取的动作都是从数据库中读取。例如Duwamish就是这种类型的程序。   如果一个应用程序连Web Garden都不支持,那么就更难支持集群了。...[阅读全文]

posted @ | Feedback (26) | Filed Under [ AspNet ]