Imports System.Runtime.InteropServices
Imports mshtml
Imports SHDocVw
Public Class CrossFrameIE
Const E_ACCESSDENIED As Integer = &H80070005
Private Shared IID_IWebBrowserApp As Guid = New Guid("0002DF05-0000-0000-C000-000000000046")
Private Shared IID_IWebBrowser2 As Guid = New Guid("D30C1661-CDAF-11D0-8A3E-00C04FC9E26E")
Public Shared Function GetDocumentFromWindow(ByVal htmlWindow As IHTMLWindow2) As IHTMLDocument2
Return Nothing
End If
Try
Dim doc As IHTMLDocument2 = htmlWindow.document
Return doc
Catch comEx As COMException
If (comEx.ErrorCode <> E_ACCESSDENIED) Then
End If
Catch ex As Exception
Return Nothing
' At this point the error was E_ACCESSDENIED because the frame contains a document from another domain.
' IE tries to prevent a cross frame scripting security issue.
Try
' Convert IHTMLWindow2 to IWebBrowser2 using IServiceProvider.
Dim sp As IServiceProvider = htmlWindow.window
Dim sp1 As IServiceProvider = CType(htmlWindow,IServiceProvider)
' Use IServiceProvider.QueryService to get IWebBrowser2 object.
Dim brws As Object = Nothing
sp.QueryService(IID_IWebBrowserApp,IID_IWebBrowser2,brws)
Dim browser As SHDocVw.WebBrowser = brws '.IWebBrowser2 = brws
Catch
End Try
End Function
End Class
<ComVisible(True),ComImport(),Guid("6D5140C1-7436-11CE-8034-00AA006009FA"),InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)> _
Public Interface IServiceProvider
<PreserveSig()> _
Function QueryService(ByRef guidService As Guid,ByRef riid As Guid,<MarshalAs(UnmanagedType.Interface)> ByRef ppvObject As Object) As Integer
End Namespace
Dim doc As mshtml.IHTMLDocument2 = CodecentrixSample.CrossFrameIE.GetDocumentFromWindow(win)
MessageBox.Show(doc.body.innerHTML)
C#包含mshtml, SHDocVw, AxSHDocVw,IHTMLDocument2 的引用
包含mshtml, SHDocVw, AxSHDocVw的引用
在vs2005中,这样引进mshtml
using mshtml;
)
SHDocVw的引用,网上有篇文章这么做的:
SHDocVw一定要在下面这个路径找:(C:\Program Files\Microsoft Visual Studio 8\Application\PreEmptive Solutions\Dotfuscator Community Edition)
1 在 Visual C# 2005 或 Visual C# .NET 中新建一个 Windows 应用程序项目。默认情况下创建 Form1。
注意:在 Visual C# 2005 中,如果您找不到 SHDocVw.dll 文件或 AxSHDocVw.dll 文件,请在 Visual Studio 命令提示符下运行下面的命令:
aximp %WINDIR%\system32\shdocvw.dll
然后,为 Microsoft WebBrowser 控件创建公共语言运行库代理 (SHDocVw.dll) 和 Windows 窗体代理 (AxSHDocVw.dll)。若要在 Visual C# 2005 中添加 DLL 文件,请按下列步骤操作:
b 在“添加引用”对话框中,单击“浏览”。
c 找到并选择 AxSHDocVw.dll 和 SHDocVw.dll 文件。
2 在“工具”菜单上,单击“自定义工具箱”以打开“自定义工具箱”对话框。在“COM 组件”选项卡上,添加一个对“Microsoft WebBrowser”的引用。单击“确定”,将 WebBrowser 控件添加到 Windows 窗体工具箱。WebBrowser 控件会显示出来,并且在工具箱中带有“Explorer”(资源管理器)字样。
注意:在 Visual Studio 2005 中,不必执行步骤 2。
3 使用该工具箱向 Form1 添加一个 WebBrowser 控件、一个 OpenFileDialog 控件和一个 CommandButton 控件。这就会向 Form1 类添加“AxWebBrowser1”、“OpenFileDialog1”和“Button1”成员变量。在 Visual C# 2005 中,会添加“webBrowser1”、“openFileDialog1”和“button1”成员变量
我的是vs2005,所以没有第2步说的东西。但是做完第一步之后,我的工具箱里没有像第3步那样出现AxWebBrowser1控件,还是原来的webBrowser控件