没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
 
                
            转帖|其它|编辑:郝浩|2011-08-18 15:17:08.000|阅读 1921 次
概述:由于项目需求,最近转战客户端,开始搞浏览器开发。众所周知,现在在微软平台上开发浏览器,最常用的方法就是扩展Webbrowser,但是首先要清楚的是,WebBrowser控件仅仅是对WebBrowser ActiveX 控件提供了托管包装而已(详细了解//msdn.microsoft.com/zh-cn/library/w290k23d(VS.80).aspx),要写一个像点样子的浏览器,很多方面还是要自己去扩展的,否则开发出来的也只能是个样子,没多少实际功能。
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
由于项目需求,最近转战客户端,开始搞浏览器开发。众所周知,现在在微软平台上开发浏览器,最常用的方法就是扩展Webbrowser,但是首先要清楚的是,WebBrowser控件仅仅是对WebBrowser ActiveX 控件提供了托管包装而已(详细了解),要写一个像点样子的浏览器,很多方面还是要自己去扩展的,否则开发出来的也只能是个样子,没多少实际功能。
本篇随笔重点将介绍如何处理WebBrowser对JS的错误处理问题。
可能有些朋友看到上句话会觉得,这问题不是很简单嘛,设置一下 ScriptErrorsSuppressed属性不就完了嘛,殊不知这样做,像其他的譬 如网页安全验证的弹出框,甚至很多其他网页内部弹出窗口也都被禁止掉了,如此当然是行不通的。可能还会有一部分朋友会说,那可以通过WebBrowser 向网页中注入JS错误处理脚本,捕获JS错误,不是也可以嘛。那我会告诉你,这种方法在面对使用很多iframe的网站是也玩完。
那么接下来,我将介绍,如何更好的避免WebBrowser中的JS错误。
避免错误,首先要想到办法去捕获错误,查遍了网上的很多资料,发现是要去实现IOleCommandTarget接口,调用接口中的Exec方法来捕获异常,然后解决,当然如果需要去调用IE的一些功能,也得需实现IObjectWithSite接口。
定义IOleCommandTarget接口、OLECMD类:
    {
             public enum OLECMDF
         {    
             // Fields    
             OLECMDF_DEFHIDEONCTXTMENU = 0x20,    
             OLECMDF_ENABLED = 2,    
             OLECMDF_INVISIBLE = 0x10,    
             OLECMDF_LATCHED = 4,    
             OLECMDF_NINCHED = 8,    
             OLECMDF_SUPPORTED = 1    
         }    
         public enum OLECMDID    
         {    
             // Fields    
             OLECMDID_PAGESETUP = 8,    
             OLECMDID_PRINT = 6,    
             OLECMDID_PRINTPREVIEW = 7,    
             OLECMDID_PROPERTIES = 10,    
             OLECMDID_SAVEAS = 4,    
             OLECMDID_SHOWSCRIPTERROR = 40    
         }    
         public enum OLECMDEXECOPT    
         {    
             // Fields    
             OLECMDEXECOPT_DODEFAULT = 0,    
             OLECMDEXECOPT_DONTPROMPTUSER = 2,    
             OLECMDEXECOPT_PROMPTUSER = 1,    
             OLECMDEXECOPT_SHOWHELP = 3    
         }    
         [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), 
Guid(    "B722BCCB-4E68-101B-A2BC-00AA00404770"), ComVisible(true)]
         public interface IOleCommandTarget    
         {    
             [return: MarshalAs(UnmanagedType.I4)]    
             [PreserveSig]    
             int QueryStatus(ref Guid pguidCmdGroup, int cCmds,
 [In, Out] NativeMethods.OLECMD prgCmds, [In, Out] IntPtr pCmdText);    
             [return: MarshalAs(UnmanagedType.I4)]    
             [PreserveSig]    
             int Exec(ref Guid pguidCmdGroup, int nCmdID, int nCmdexecopt,
 [In, MarshalAs(UnmanagedType.LPArray)] object[] pvaIn, ref int pvaOut);    
         }    
         [StructLayout(LayoutKind.Sequential)]    
         public class OLECMD    
         {    
             [MarshalAs(UnmanagedType.U4)]    
             public int cmdID;    
             [MarshalAs(UnmanagedType.U4)]    
             public int cmdf;    
             public OLECMD()    
             {    
             }    
         }    
         public const int S_FALSE = 1;    
         public const int S_OK = 0;    
         public static readonly Guid CGID_DocHostCommandHandler =
 new Guid(    "f38bc242-b950-11d1-8918-00c04fc2c836");
         public const int VARIANT_TRUE = -1;    
         public const int VARIANT_FALSE = 0;    
         public const int OLECMDERR_E_NOTSUPPORTED = -2147221244;    
     }
然后定义一个类ExtendedWebBrowserSite,去实现接口:
}
当然这里主要是通过实现IOleCommandTarget.Exec方法去捕获OLECMDID.OLECMDID_SHOWSCRIPTERROR消息,然后避免异常。
最后在你的扩展的WebBrowser里面重载一下 CreateWebBrowserSiteBase方法,完成调用。
}
完成以上操作,就可以完全避免WebBrowser中的JS错误发生。
由于时间有限,并没有多少时间去详细介绍,感兴趣的朋友可以仔细去研究COM组件。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@ldacury.cn
文章转载自:博客园



 
					接DevExpress原厂商通知,将于近日上调旗下产品授权价格,现在下单客户可享受优惠报价!
 
					面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
 
					本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
 
					本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@ldacury.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
 
                 
            
 靠谱朗驰娱乐体育
靠谱朗驰娱乐体育  
					 
					 
					 
					 
					