如何对webbrowser和IE编程
1个回答
2014-12-22
展开全部
每次 Internet Explorer需要向客户提供关于当前活动状态的信息, Internet Explorer 激发通过DWebBrowserEvents2 连接点激发一个事件. (之前到版本 4, Internet Explorer 通过 DWebBrowserEvents 接口激发事件.但到了版本4.x和5, Internet Explorer 通过 DWebBrowserEvents2 连接点.)注意如何领会到Internet Explorer加法那些事件?最佳途径是MSDN Online Web Workshop. 另外采用 OLE-COM Object Viewer 不像WebBrowser 控件 和 Internet Explorer的其他接口,是剑接口没有继承体系. DWebBrowserEvents 接口严格应用于Internet Explorer 3. 如果你正宿主WebBrowser 控件或者自动化Internet Explorer 5, 你可以通过此接口接收事件—但是不可挂接. DWebBrowserEvents2 接口包含的方法是为Internet Explorer 5定制的.用 DWebBrowserEvents2 替代DWebBrowserEvents ,你将有更多的控制能力. 所以不要忘记接口的最后面的2.尽管DWebBrowserEvents2 是一个事件接口, 它其实就是像IWebBrowser2 一样的另外 COM 接口,所以它可以包含方法. (D 开头的命名是表示这是派遣接口.一个派遣接口是一个IDispatch 接口.但不同于普通接口, 派遣接口没有vtable.) 就像一个接口一样,派遣接口只不过提供一些函数的定义—他们并不真实实现.事件的实现由客户提供.举例来说,为了让WebBrowser 激发一个事件, 在DWebBrowserEvents2 接口中适当定义一些方法.这些方法由客户实现.但WebBrowser不直接调用这些方法.换句话讲, WebBrowser 并不调用DocumentComplete 方法.因为 DWebBrowserEvents2 是派遣接口, WebBrowser 通过IDispatch::Invoke调用客户的实现. 早期, 当WebBrowser 调用客户的Invoke 实现, WebBrowser 传递事件被激发的DISPID.注意某些工具如Visual Basic, MFC, 和 ATL 提供Invoke实现表7-6 列出 WebBrowser 事件. (这些是WebBrowser 控件和Internet Explorer供有的事件,尽管有些事件仅仅用于自动化Internet Explorer).注意尽管有些方法为不包含2.尽管DWebBrowserEvents2 并非继承自WebBrowserEvents, DWebBrowserEvents2 还是匹配DWebBrowserEvents中被更改的,以免混淆。注意表 7-6 重的参数有些值同样有 VARIANT_ TRUE 或VARIANT_FALSE. 如果你使用Visual C++,确信分派使用这些值不要使用 TRUE 或FALSE. 如果你使用Visual Basic, 它会自动帮助你转换,你可以比较True和False.现在来仔细看看这些事件Table 7-6WebBrowser 事件私有事件描述BeforeNavigate2 在导航之前发生. (该事件并不在不刷新页面的时候发生)CommandStateChange 当命令状态改变时发生.该事件告诉你何时使能或者禁止 Back 以及Forward 菜单像或者按钮.DocumentComplete 当整个文档完全完成装载时发生.如果你刷新页面, 此事件并不激发.DownloadBegin 当一个下载项目开始时候发生,此事件也在你刷新(IWebBrowser2::Refresh.)时发生DownloadComplete党整个下载项目完成是发生该事件也发生在完成刷新页面.NavigateComplete2 当整个导航完成. 该事件对应于BeforeNavigate2.NewWindow2 在一个新的窗口被创建以显示Web页或者其他资源的时候发生。譬如你在页面中以新建窗口的方式打开一个连接OnFullScreen 当FullScreen属性被改变时候发生.此事件携带一个VARIANT_ BOOL类型的输入参数指示Internet Explorer 是否处于全屏(full-screen)模式 (VARIANT_TRUE) 或者处于普通模式(VARIANT_FALSE).OnMenuBar 菜单条MenuBar属性被改变的时候发生. 一个VARIANT_ BOOL类型的输入参数指 Internet Explorer的菜单条属性是可见(VARIANT_TRUE) 或者隐藏 (VARIANT_ FALSE).OnQuit 当Internet Explorer正在退出时发生. 该事件当用户关闭浏览器或者调用Quit方法.OnStatusBar 当StatusBar属性被改变的时候发生。事件携带VARIANT_ BOOL类型的输入参数指示Internet Explorer的状态条是否可见 (VARIANT_TRUE) 或者隐藏 (VARIANT_FALSE).OnTheaterMode 当TheaterMode属性被改变时发生. 事件携带VARIANT_ BOOL类型的输入参数指示Internet Explorer的状态条是否可见 (VARIANT_TRUE) 或者隐藏 (VARIANT_FALSE).OnToolBar 当ToolBar属性被改变时发生. 事件携带VARIANT_ BOOL类型的输入参数指示Internet Explorer的状态条是否可见 (VARIANT_TRUE) 或者隐藏 (VARIANT_FALSE).OnVisible 当WebBrowser将被显示或者隐藏时发生。. 事件携带VARIANT_ BOOL类型的输入参数指示Internet Explorer的状态条是否可见 (VARIANT_TRUE) 或者隐藏 (VARIANT_FALSE).ProgressChange 当下载进度被更新时候发生PropertyChange 当属性改变时候发生。典型的, 当PutProperty方法被调用时StatusTextChange Internet Explorer 和 WebBrowser 控件改变状态条时候发生。即使webbrowser控件没有状态条。StatusTextChange给客户一个改变状态条的机会TitleChange .当文档对象的title可用或者改变的时候发生BeforeNavigate2BeforeNavigate2 就像字面上所说. 当Internet Explorer 导航到一个WEB页是激发; 因此, 当用户输入一个 URL, 点击 Back 或者 Forward 按钮, 或者处理一个导航时都会发生. BeforeNavigate2 也在WebBrowser 控件导航类方法调用时发生, 例如 Navigate, Navigate2, GoHome, 或者 GoSearch. 也许, 该事件不会在你刷新页面时发生. 如果页面上有帧, BeforeNavigate2 将像顶级窗口一样被激发. BeforeNavigate2 由7个输入参数, 见7-7.Table 7-7Input Parameters of the BeforeNavigate2 EventParameterDescriptionpDisp 将发生导航的顶级窗口或者帧的Idispatch接口的地址URL 将导航至的URL Flags 保留TargetFrameName 显示资源的窗口或者帧的名字字符串,或者为NULL(如果没有命名)PostData HTTP POST 传输的数据地址Headers增加的将要发给服务器的 HTTP 头. 一般HTTP头指定其它的服务器要求。传送给服务器的数据类型、状态马等Cancel cancel 标志的地址. 设置为TRUE可取消导航注意打所属参数匹配于Navigate 或者Navigate2的调用参数.如果 BeforeNavigate2 由一个或者多个导航类调用激发,这些导航类的方法参数 传递到BeforeNavigate2 方法.在事件的句柄函数中, 你可以使用Cancel 参数取消导航, 或者你可以是用pDisp 参数修改导航目的.设置Cancel 参数为 VARIANT_TRUE 可以取消导航,如果你想,你可以通过pDisp修改参数导航信息且导航到另外的位置.举例来说,如果我们向停止当前导航, 增加一些头信息,且导航到原先的URL.在Visual Basic, 我们可以如下代码实现:Private Sub WebBrowser1_BeforeNavigate2(ByVal pDisp As Object, _ URL As Variant, _ Flags As Variant, _ TargetFrameName As Variant, _ PostData As Variant, _ Headers As Variant, _ Cancel As Boolean)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询