如何对webbrowser和IE编程
2个回答
2016-02-02 · 知道合伙人软件行家
关注
展开全部
WebBrowser Host
首先,必须有COM的基础知识,因为IE本身就是COM技术的典型应用。我们看到最上层是WebBrowser的宿主(Host),也就是任何你想重用(ReUse)webbrowser control的应用程序,可以是vb程序,也可以是vc或者任何其他语言的应用程序。应用程序必须是可容纳activex控件的容器。
Webbrowser control既是activex control也是activex document 的宿主。作为控件,它可以置于任何activex容器,作为文档容器,它针对特殊的类型,调用特殊类型注册的文档server以显示文档。如果你想显示一个.doc文档,webbrowser control装载windows word,,对于html文档,webbrowser装载名为mshtml的组件,针对不同的文档,你不需要开发不同的应用,仅仅是调用webbrowser control即可。
Shdocvw
Shdocvw.dll包含了webbrowser control ,控制webbrowser control (就像控制其他任何activex com 控件一样),提供浏览能力给上层宿主。请注意webbrowser control位于第二级中。甚至IE也不直接而是通过shdocw.dll来使用webbrowser control的。尽管shdocvw提供了大部分的浏览功能,但是并不提供IE窗口的呈现功能。尽管如此,shdocvw还是提供了简单创建web 应用程序的能力。之后章节会讲到如何将ie的高级特性加入到你的应用程序。
MSHTML
早期的mshtml具有读取显示html的功能。MSHTML实际上是一个active 文档服务器,但是却可以作为其他控件的容器。可以将activex控件置于html中,此时mshtml就是一个activex宿主,还可以控制其他的控件如vbscript 脚本引擎和javascript脚本引擎,java applet ,geszhong,各种插件—别意外,plug-in都是按照ie activex规范写的。
首先,必须有COM的基础知识,因为IE本身就是COM技术的典型应用。我们看到最上层是WebBrowser的宿主(Host),也就是任何你想重用(ReUse)webbrowser control的应用程序,可以是vb程序,也可以是vc或者任何其他语言的应用程序。应用程序必须是可容纳activex控件的容器。
Webbrowser control既是activex control也是activex document 的宿主。作为控件,它可以置于任何activex容器,作为文档容器,它针对特殊的类型,调用特殊类型注册的文档server以显示文档。如果你想显示一个.doc文档,webbrowser control装载windows word,,对于html文档,webbrowser装载名为mshtml的组件,针对不同的文档,你不需要开发不同的应用,仅仅是调用webbrowser control即可。
Shdocvw
Shdocvw.dll包含了webbrowser control ,控制webbrowser control (就像控制其他任何activex com 控件一样),提供浏览能力给上层宿主。请注意webbrowser control位于第二级中。甚至IE也不直接而是通过shdocw.dll来使用webbrowser control的。尽管shdocvw提供了大部分的浏览功能,但是并不提供IE窗口的呈现功能。尽管如此,shdocvw还是提供了简单创建web 应用程序的能力。之后章节会讲到如何将ie的高级特性加入到你的应用程序。
MSHTML
早期的mshtml具有读取显示html的功能。MSHTML实际上是一个active 文档服务器,但是却可以作为其他控件的容器。可以将activex控件置于html中,此时mshtml就是一个activex宿主,还可以控制其他的控件如vbscript 脚本引擎和javascript脚本引擎,java applet ,geszhong,各种插件—别意外,plug-in都是按照ie activex规范写的。
展开全部
navNoReadFromCache. 当前未实现. navNoWriteToCache. 当前未实现. navAllowAutoSearch. 如果指定的URL未找到,自动搜索功能将试图导航到通常的顶级域名如.com .net .org以找到正确的URL。如果失败, URL将传递给搜索引擎. navBrowserBar. 如果可能,将 URL 装入到 Explorer 的地址栏Bar。
第三个参数 TargetFrameName. 指定web页的哪一个frame将会发生导航. (参数的类型是指向 VARIANT的指针)此字符串将为以存在于web页中的名字或者一个指定的值如 _top 或 _search. _top 值指定 URL 将被当前最顶层
web页装入并不在任何一个当前页中存在的frame. _search 指示搜索面板将被打开. (该值仅在你自动化操控Internet Explorer时发生.) 如果你指定的frame名称并未发现,, 新的Internet Explorer 窗口将被打开。 你可以使用 PostData 参数 (第四个)通过HTTPpost事务将指定特定的数据发送到服务器. (参数的类型是指向 VARIANT的指针) Post 处理用于将在HTML表单收集的数据发送到服务器。如果此参数不指定任何数据 , Navigate 方法将
使用Get方法. 另外,如果你不指定 HTTP 协议的URL (换句话讲,如果你指定例如 FILE 协议的 URL), PostData 参数将被忽略。 你也可以使用第五个参数, Headers, 以发送HTTP 头信息到服务器. (T参数的类型是指向 VARIANT的指针) 这些加入的头信息将被 WebBrowser 控件如常发送出去. 作为 PostData 参数, 如果你并不指定第一个参数, Headers 将被忽略. (二) 调用 Navigate 方法比GoBack 以及 GoForward 要困难,但如果你正仅仅导航到URL 且并不传递任何附加参数, 它的调用很容易。 举例来说, VB中导航到 Microsoft 主页, 可如下: WebBrowser1.Navigate "http://www.microsoft.com" VB代码调用Navigate 如此容易因为所有参数出第一个参数外都可以是可选. 如此相对照,VC++不可以省略任何参数. 如果你想使用VC++不是勇任何特别的参数导航到 Microsoft的 home page, 你必须传递空的VARIANT 结构。 MFC 应用程序,你必须如下调用 Navigate COleVariant vtEmpty; m_webBrowser.Navigate(_T("http://www.microsoft.com"), &vtEmpty, &vtEmpty, &vtEmpty, &vtEmpty); 该例子展示了在MFC应用程序中控制WebBrowser控件. 我传递一个普通的字符串而替代 BSTR 因为 MFC 提供了一个 WebBrowser 控件的包装类,第一个载包装类中是LPCTSTR, 一个普通的字符串. 其他参数为指向 VARIANT 结构的指针。 如果你不想指定任何特别的参数, 别仅仅传递 NULL —那样做, 你的应用程序会招来崩溃。你必须传递一个空的VARIANT 结构的指针. 前面的代码使用
了 COleVariant 类, 那是一个与 CComVariant 类相似的类。 COleVariant 简单包装了 VARIANT 使得VARIANT 结构易于使用. 属性 现在你看到了所有的 IwebBrowser 的方法,你大概向了解其属性。(我是不是太苛求了?) IWebBrowser 接口有30个属性,描述于表6-2. 我一已按照IWebBrowser 的Vtable中的字母序列出。 Table 6-2. IWebBrowser 属性按照vtable排序 属性 描述 Application 返回宿主WebBrowser 控件的自动化对象 (IDispatch) 实现,如果对象不可用,则返回的WebbOrwser控件的自动化对象 Parent 返回WebBrowser控件的父控件的自动化实现 (IDispatch) ,通常是容器—举例来讲,,您的宿主或者Internet Explorer 窗口。 Container 返回WebBrowser控件容器的自动化对象 (IDispatch) 。通常,该值返回同 Parent 属性一样的值。. Document 返回活动文档的自动化实现 (IDispatch) 。如果 HTML 当前显示在WebBrowser, Document 属性给出你存取 DHTML 对象模型的途径. TopLevelContainer 返回一个布尔值指示IE是否是WebBRowser控件的顶级容器。在 words中,如果IE是宿主应用承需则返回true Type 返回已经在WebBrowser中装载的对象的类型。举例,如果HTML document被装载, Type 将返回 Microsoft HTML Document 5.0. 如果文档是Word 文档, Type 返回 Microsoft Word Document. Left .返回或设置控件在容器窗口左边距 Top .返回或设置控件在容器窗口顶部边距 Width 返回或设置webbrowser控件在窗口中的水平方向的向苏为单位宽度 Height 返回或设置webbrowser控件在窗口中的处置方向的向像素为单位高度 LocationName 返回一个WebBrowser当前显示的资源名称的字符串 (换句话讲, HTML 页, Word 文档,,folder, 诸如此类) 。 如果资源是 HTML 页,字符串是标题。如果资源是文件或者文件夹,字符串为文件名或者文件夹名。—举例, foo.doc (Word文档)或者 Temp (temp directory.) LocationURL 返回WebBrowser正在显示的资源的URL Busy 返回一个布尔值指示WebBrowser 当前是否正在装入 URL.。如果
当前属性返回 true, 你可以使用 Stop 方法取消代掉导航。
看完表 6-2, 清晰展示了你可使用的属性. 当中的一些可能需要更多的解释. IWebBrowser 使用的相当多的一个属性是 LocationURL, 给出了当前你装入WebBrowser窗口的 URL。 获取 LocationURL 值在VB中相当容易: Dim strLocation strLocation = WebBrowser1.LocationURL
Visual C++的MFC应用, MFC 包装类使的访问LocationURL 很容易. 你简单调用 GetLocationURL 方法,该方法返回一个 CString 对象. 当你想在自动化IE中或者
webBrowser的MFC应用中访问 LocationURL when automating Internet
Explorer or when hosting the WebBrowser control in a C++ application that's not built by using MFC, 你必须调用携带一指向BSTR的指针。 BSTR 将包含返回值. 此处展示如何在 C++中使用: BSTR bstrURL; m_pInternetExplorer->get_LocationURL(&bstrURL); 存取 Document 属性在VB中相当容易,当定义一个变量后(举例, HtmlDoc), 值需要 set 为 Document 属性: Set HtmlDoc = WebBrowser1.Document MFC 中也很容易,使用 MFC 包装类的GetDocument方法: IDispatch* pDisp; pDisp = m_webBrowser.GetDocument();
GetDocument 返回指向代表文档 IDispatch 接口的指针. 如果 GetDocument 失败, 该对象将为NULL. 非MFC C++ 应用或者任何自动化IE
的C++ 应用访问Document 属性就只能够采用调用COM的方法—通过属性的get_方法. (注艺属性实只读,所以这里无put_ 方法.) 当调用 Document 的get_ 方法,你传递一个接受 IDispatch 的指针.此处展示了如何调用: IDispatch* pDisp; HRESULT hr = m_pInternetExplorer->get_Document(&pDisp); 当使用这些代码,你可以使用 SUCCEEDED 宏( Win32 API的一部分), 以监测调用是否成功。在尝试使用Idispatch接口前你应当确信调用成功。
(三) IWebBrowserApp IWebBrowserApp 接口仅仅在IE中实现。 典型的,你使用InternetExplorer 对象创建一个IE的实例. 然后你使用 IWebBrowserApp 接口操纵此实例. (今天采用IWebBrowser2 替代) IWebBrowserApp 接口继承自 IWebBrowser, 所以它提供 IWebBrowser 的全部功能。 因为
IWebBrowserApp呈现一个IE窗口的实例, 所以它的方法和属性典型地允许你控制浏览器窗口的用户接口。
这些方法和属性并非包含在WebBrowser的 IWebBrowser 中的:寄宿control的应用程序提供诸如状态条, 工具条, 以及菜单条等用户接口. WebBrowser 控件仅仅用于装载web页以及其它类型文件。 IWebBrowserApp 有4个方法和10 各属性。 方法 IWebBrowserApp 接口的属性很直观立如下表, 但是有2个有理由值的讨论:GetProperty 和 PutProperty. 此两个方法允许你在IE属性包(property bag)中存储一个属性一边你能够在其后重新找回他们。 你将典型地从一个web页上存储一些状态信息到另一个web页 (事实上,使用IWebBrowser2 接口你可以在宿主一个WebBrowser 控件时候使用此方法) Table 6-3. IWebBrowserApp vtable 次序的方法 方法 描述 Quit 促使 Internet Explorer 窗口关闭。换句话讲,将自动化操作关闭IE实例 ClientToWindow 转换一个点从窗口坐标到客户坐标。 PutProperty 存储一个属性值到ie的属性包,将可以随手采用GetProperty.获取 GetProperty 获取先前由 PutProperty.方法存储的属性值 VB代码: InternetExplorer1.PutProperty "CurrentPicture", 10 InternetExplorer1.GetProperty("CurrentPicture") VC++代码: CSomeClass::PutGetProperty(VARIANT vtCurrentValue, VARIANT* vtNewValue) { HRESULT hr; hr = m_pInternetExplorer->PutProperty(L"CurrentPicture", vtCurrentValue);
第三个参数 TargetFrameName. 指定web页的哪一个frame将会发生导航. (参数的类型是指向 VARIANT的指针)此字符串将为以存在于web页中的名字或者一个指定的值如 _top 或 _search. _top 值指定 URL 将被当前最顶层
web页装入并不在任何一个当前页中存在的frame. _search 指示搜索面板将被打开. (该值仅在你自动化操控Internet Explorer时发生.) 如果你指定的frame名称并未发现,, 新的Internet Explorer 窗口将被打开。 你可以使用 PostData 参数 (第四个)通过HTTPpost事务将指定特定的数据发送到服务器. (参数的类型是指向 VARIANT的指针) Post 处理用于将在HTML表单收集的数据发送到服务器。如果此参数不指定任何数据 , Navigate 方法将
使用Get方法. 另外,如果你不指定 HTTP 协议的URL (换句话讲,如果你指定例如 FILE 协议的 URL), PostData 参数将被忽略。 你也可以使用第五个参数, Headers, 以发送HTTP 头信息到服务器. (T参数的类型是指向 VARIANT的指针) 这些加入的头信息将被 WebBrowser 控件如常发送出去. 作为 PostData 参数, 如果你并不指定第一个参数, Headers 将被忽略. (二) 调用 Navigate 方法比GoBack 以及 GoForward 要困难,但如果你正仅仅导航到URL 且并不传递任何附加参数, 它的调用很容易。 举例来说, VB中导航到 Microsoft 主页, 可如下: WebBrowser1.Navigate "http://www.microsoft.com" VB代码调用Navigate 如此容易因为所有参数出第一个参数外都可以是可选. 如此相对照,VC++不可以省略任何参数. 如果你想使用VC++不是勇任何特别的参数导航到 Microsoft的 home page, 你必须传递空的VARIANT 结构。 MFC 应用程序,你必须如下调用 Navigate COleVariant vtEmpty; m_webBrowser.Navigate(_T("http://www.microsoft.com"), &vtEmpty, &vtEmpty, &vtEmpty, &vtEmpty); 该例子展示了在MFC应用程序中控制WebBrowser控件. 我传递一个普通的字符串而替代 BSTR 因为 MFC 提供了一个 WebBrowser 控件的包装类,第一个载包装类中是LPCTSTR, 一个普通的字符串. 其他参数为指向 VARIANT 结构的指针。 如果你不想指定任何特别的参数, 别仅仅传递 NULL —那样做, 你的应用程序会招来崩溃。你必须传递一个空的VARIANT 结构的指针. 前面的代码使用
了 COleVariant 类, 那是一个与 CComVariant 类相似的类。 COleVariant 简单包装了 VARIANT 使得VARIANT 结构易于使用. 属性 现在你看到了所有的 IwebBrowser 的方法,你大概向了解其属性。(我是不是太苛求了?) IWebBrowser 接口有30个属性,描述于表6-2. 我一已按照IWebBrowser 的Vtable中的字母序列出。 Table 6-2. IWebBrowser 属性按照vtable排序 属性 描述 Application 返回宿主WebBrowser 控件的自动化对象 (IDispatch) 实现,如果对象不可用,则返回的WebbOrwser控件的自动化对象 Parent 返回WebBrowser控件的父控件的自动化实现 (IDispatch) ,通常是容器—举例来讲,,您的宿主或者Internet Explorer 窗口。 Container 返回WebBrowser控件容器的自动化对象 (IDispatch) 。通常,该值返回同 Parent 属性一样的值。. Document 返回活动文档的自动化实现 (IDispatch) 。如果 HTML 当前显示在WebBrowser, Document 属性给出你存取 DHTML 对象模型的途径. TopLevelContainer 返回一个布尔值指示IE是否是WebBRowser控件的顶级容器。在 words中,如果IE是宿主应用承需则返回true Type 返回已经在WebBrowser中装载的对象的类型。举例,如果HTML document被装载, Type 将返回 Microsoft HTML Document 5.0. 如果文档是Word 文档, Type 返回 Microsoft Word Document. Left .返回或设置控件在容器窗口左边距 Top .返回或设置控件在容器窗口顶部边距 Width 返回或设置webbrowser控件在窗口中的水平方向的向苏为单位宽度 Height 返回或设置webbrowser控件在窗口中的处置方向的向像素为单位高度 LocationName 返回一个WebBrowser当前显示的资源名称的字符串 (换句话讲, HTML 页, Word 文档,,folder, 诸如此类) 。 如果资源是 HTML 页,字符串是标题。如果资源是文件或者文件夹,字符串为文件名或者文件夹名。—举例, foo.doc (Word文档)或者 Temp (temp directory.) LocationURL 返回WebBrowser正在显示的资源的URL Busy 返回一个布尔值指示WebBrowser 当前是否正在装入 URL.。如果
当前属性返回 true, 你可以使用 Stop 方法取消代掉导航。
看完表 6-2, 清晰展示了你可使用的属性. 当中的一些可能需要更多的解释. IWebBrowser 使用的相当多的一个属性是 LocationURL, 给出了当前你装入WebBrowser窗口的 URL。 获取 LocationURL 值在VB中相当容易: Dim strLocation strLocation = WebBrowser1.LocationURL
Visual C++的MFC应用, MFC 包装类使的访问LocationURL 很容易. 你简单调用 GetLocationURL 方法,该方法返回一个 CString 对象. 当你想在自动化IE中或者
webBrowser的MFC应用中访问 LocationURL when automating Internet
Explorer or when hosting the WebBrowser control in a C++ application that's not built by using MFC, 你必须调用携带一指向BSTR的指针。 BSTR 将包含返回值. 此处展示如何在 C++中使用: BSTR bstrURL; m_pInternetExplorer->get_LocationURL(&bstrURL); 存取 Document 属性在VB中相当容易,当定义一个变量后(举例, HtmlDoc), 值需要 set 为 Document 属性: Set HtmlDoc = WebBrowser1.Document MFC 中也很容易,使用 MFC 包装类的GetDocument方法: IDispatch* pDisp; pDisp = m_webBrowser.GetDocument();
GetDocument 返回指向代表文档 IDispatch 接口的指针. 如果 GetDocument 失败, 该对象将为NULL. 非MFC C++ 应用或者任何自动化IE
的C++ 应用访问Document 属性就只能够采用调用COM的方法—通过属性的get_方法. (注艺属性实只读,所以这里无put_ 方法.) 当调用 Document 的get_ 方法,你传递一个接受 IDispatch 的指针.此处展示了如何调用: IDispatch* pDisp; HRESULT hr = m_pInternetExplorer->get_Document(&pDisp); 当使用这些代码,你可以使用 SUCCEEDED 宏( Win32 API的一部分), 以监测调用是否成功。在尝试使用Idispatch接口前你应当确信调用成功。
(三) IWebBrowserApp IWebBrowserApp 接口仅仅在IE中实现。 典型的,你使用InternetExplorer 对象创建一个IE的实例. 然后你使用 IWebBrowserApp 接口操纵此实例. (今天采用IWebBrowser2 替代) IWebBrowserApp 接口继承自 IWebBrowser, 所以它提供 IWebBrowser 的全部功能。 因为
IWebBrowserApp呈现一个IE窗口的实例, 所以它的方法和属性典型地允许你控制浏览器窗口的用户接口。
这些方法和属性并非包含在WebBrowser的 IWebBrowser 中的:寄宿control的应用程序提供诸如状态条, 工具条, 以及菜单条等用户接口. WebBrowser 控件仅仅用于装载web页以及其它类型文件。 IWebBrowserApp 有4个方法和10 各属性。 方法 IWebBrowserApp 接口的属性很直观立如下表, 但是有2个有理由值的讨论:GetProperty 和 PutProperty. 此两个方法允许你在IE属性包(property bag)中存储一个属性一边你能够在其后重新找回他们。 你将典型地从一个web页上存储一些状态信息到另一个web页 (事实上,使用IWebBrowser2 接口你可以在宿主一个WebBrowser 控件时候使用此方法) Table 6-3. IWebBrowserApp vtable 次序的方法 方法 描述 Quit 促使 Internet Explorer 窗口关闭。换句话讲,将自动化操作关闭IE实例 ClientToWindow 转换一个点从窗口坐标到客户坐标。 PutProperty 存储一个属性值到ie的属性包,将可以随手采用GetProperty.获取 GetProperty 获取先前由 PutProperty.方法存储的属性值 VB代码: InternetExplorer1.PutProperty "CurrentPicture", 10 InternetExplorer1.GetProperty("CurrentPicture") VC++代码: CSomeClass::PutGetProperty(VARIANT vtCurrentValue, VARIANT* vtNewValue) { HRESULT hr; hr = m_pInternetExplorer->PutProperty(L"CurrentPicture", vtCurrentValue);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询