ドメインの異なる子フレームへのアクセス
クロスドメインの例画面を起動'サンプル4.1.3_ドメインの異なる子フレームへのアクセス Public Sub getFrame4() Dim ie As InternetExplorer Set ie = getIE("クロスドメインの例") 'IE取得 'フレーム1の中身へアクセス MsgBox ie.document.frames("frame1").document.body.innerHTML 'フレームGoogleへのアクセス MsgBox ie.document.frames("Google").document.body.innerHTML End Sub 'ドキュメントタイトル/URLを指定してIEを取得 Public Function getIE(arg_title As String, Optional arg_url As String) As Object Dim ie As Object 'IEを格納する変数(オブジェクト型) Dim sh As Object '起動中のShellWindow一式を格納する変数 Dim win As Object 'ShellWindowを格納する変数 Dim document_title As String 'ドキュメントタイトルの一時格納変数 Set sh = CreateObject("Shell.Application") 'ShellWindowをwinsに格納 'ShellWindowから1つづつ取得して処理 For Each win In sh.windows 'ドキュメントタイトル取得失敗を無視(処理継続) On Error Resume Next document_title = "" document_title = win.document.Title On Error GoTo 0 'タイトルバーに引数が含まれるかチェック If InStr(document_title, arg_title) > 0 Then Set ie = win '変数ieに取得したwinを格納 Exit For 'ループを抜ける End If Next Set getIE = ie '値の返却 End Function
フレーム「frame1」の中身は親画面と同じドメインに属しているから、他のサンプルコードでも扱っているように処理は成功するわ。
MsgBox ie.document.frames("frame1").document.body.innerHTML
それに対して、フレーム「Google」の中身はwww.google.co.jpのページになっている。この場合、IEのセキュリティ上の制約で、Documentメソッドの実行に失敗するわ。具体的には-21?????のエラー番号で「アクセスが拒否されました」という実行時エラーメッセージが表示される。
MsgBox ie.document.frames("Google").document.body.innerHTML
これに対するワークアラウンドは現時点では見つかっていないわ。探すのはIEのセキュリティホールを見つけるのと同じくらい難しいはず。