注册 登录
编程论坛 VB.NET论坛

vb.net跨域访问疑虑。

zsdqxzxx 发布于 2017-12-15 22:11, 1923 次点击
Imports System
Imports System.Runtime.InteropServices
Imports mshtml
Imports SHDocVw
Namespace CodecentrixSample
    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")
        ' Returns null in case of failure.
        Public Shared Function GetDocumentFromWindow(ByVal htmlWindow As IHTMLWindow2) As IHTMLDocument2
            If htmlWindow Is Nothing Then
                Return Nothing
            End If
            ' First try the usual way to get the document.
            Try
                Dim doc As IHTMLDocument2 = htmlWindow.document
                Return doc
            Catch comEx As COMException
                ' I think COMException won't be ever fired but just to be sure ...
                If (comEx.ErrorCode <> E_ACCESSDENIED) Then
                    Return Nothing
                End If
            Catch ex As System.UnauthorizedAcces***ception

            Catch ex As Exception
                ' Any other error.
                Return Nothing
            End Try
            ' 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)
                ' Get the document from IWebBrowser2.
                Dim browser As SHDocVw.WebBrowser = brws     '.IWebBrowser2 = brws
                Return browser.Document
            Catch
                Return Nothing
            End Try
        End Function
    End Class
    ' This is the COM IServiceProvider interface, not System.IServiceProvider .Net interface!
    _
    Public Interface IServiceProvider
        _
     Function QueryService(ByRef guidService As Guid, ByRef riid As Guid, ByRef ppvObject As Object) As Integer
    End Interface
End Namespace
 
使用方法:
Dim win As mshtml.IHTMLWindow2 = tmpframe.window
Dim doc As mshtml.IHTMLDocument2 = CodecentrixSample.CrossFrameIE.GetDocumentFromWindow(win)
MessageBox.Show(doc.body.innerHTML)
以上是网上搜索到的,但是,使用方法中的Dim win As mshtml.IHTMLWindow2 = tmpframe.window,tmpframe.window怎么用啊?
1 回复
#2
zsdqxzxx2018-01-15 17:17
高手呢?
1