IEのフレームDocの取得(別ドメイン?)

解決


IMA  2005-12-16 22:22:28  No: 128966

魔界の仮面弁士さんの 2004/07/23(金) 14:57:59 のコメント
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200407/04070100.txt

> 例えば、一番外側にあるHTMLが、

> <frameset cols="50%,*">
>   <frame src="http://○○○/frame1.htm" name="frame1">
>   <frameset rows="50%,*">
>     <frame src="http://○○○/frame1.htm" name="frame2">
>     <frame src="https://○○○/frame1.htm" name="frame3">
>   </frameset>
>   <noframes></noframes>
> </frameset>

> のようになっていたとします。ドメインは全く同一です。

> もし、上記フレームセットのURLが、「http://○○○/F.htm」だったとすると、
> Frame1 と Frame2 は操作できますが、Frame3は操作できない事になります。

> あるいは、フレームセットのURLが、「https://○○○/F.htm」だったとすると、
> Frame1 と Frame2 が操作できませんが、Frame3は操作可能です。

と同じような構成のHP(但しhttpとhttpsが反対です)のfarme3を
取得し、ある単語の背景を変更し様としています。

魔界の仮面弁士さんのご説明でアクセスが拒否されるはずであることは
理解できるのですが、googleツールバーのキーワードハイライト機能では
このフレームでもハイライト可能です。

私もVBですがIEツールバーを作成し、そこからキーワードハイライト
しようとしています。この場合は見事にDocumentオブジェクトが取得
出来ません。

なにか解決法はありませんでしょうか?


VB梅  2005-12-16 23:25:55  No: 128967

私もフレームのDocumentオブジェクト取得に苦労しました
    Do While WebBrowser1.ReadyState <> READYSTATE_COMPLETE
        DoEvents
    Loop

    Do While WebBrowser1.Document.ReadyState <> "complete"
        DoEvents
    Loop
ではフレームの読み込みまでは判らないようで
フレームが読み込まれないうちに
    Set objDocument = WebBrowser1.Document
    Set objset1 = objDocument.frames(1).Document
    Set objset2 = objset1.frames(0).Document 'これはフレームの中のフレームのドキュメントを取得しています(大和証券の株情報取得に使用Https:です)
等とやるとエラーになります。
On Error GoToを使用してエラーがなくなるまで待機して回避しました。
VB.NETは正常に動きます。
質問の内容がわからないので回答になってるかわかりませんが・・・


ガッ  2005-12-17 00:41:21  No: 128968

※DOMを使って、あるテキストの一部分の背景を変更できるのかな…?
リンク先を読んだ限りでは、IE(のコンポーネント)では別ドメインと判断されるオブジェクトにはアクセスできない"様"ですね。

これは生のHTMLを走査して(この段階でDOMに落として使うのもいいかな)、
frameタグの先も自力で走査して…
うーん、ゴリゴリ過ぎるなぁ…


IMA  2005-12-17 07:19:29  No: 128969

Resありがとうございました。

VB梅さん
よくわかりませんが、完全に読み込まれたと考えている時点でトライしても
私のはエラーでgoogleではうまく機能しています。
→何かノウハウ(テクニック)があるような気がするのですが・・

ガッさん
> ※DOMを使って、あるテキストの一部分の背景を変更できるのかな…?
私のツールバーでも
通常のHP(同一ドメイン)ではどんなに階層が深く複雑になっていても
ハイライトできている?と思っています。→試した範囲です。
> これは生のHTMLを走査して(この段階でDOMに落として使うのもいいかな)、
> frameタグの先も自力で走査して…
> うーん、ゴリゴリ過ぎるなぁ…
私も過去ログから同じような事を考えましたが・・
「frameタグの先も自力で走査して、もとのframeに戻してやる?」
  googleツールバーでは
そんなことしているのですかね?

私も、もう少し調べてみますが引き続き皆様のアドバイスをお待ちします。

宜しくお願いします。


魔界の仮面弁士  2005-12-17 11:08:58  No: 128970

とりあえず WebBrowser の場合は、IInternetHostSecurityManager.GetSecurityId を実装する事で、別ドメインのフレームを制御する事ができました。

IEツールバーからの制御は試していません。(^_^;)


IMA  2005-12-17 17:56:56  No: 128971

魔界の仮面弁士さん、いつも書き込み参考にさせていただいております。
> とりあえず WebBrowser の場合は、
> IInternetHostSecurityManager.GetSecurityId を実装する事で、
> 別ドメインのフレームを制御する事ができました。

上記の実装についてもう少し具体的にアドバイスをいただく事は
可能でしょうか?

私は今、VB6とEdanmoさんの OLE interfaces & functions v1.81 
を利用させていただいております。
クラスモジュールで
Implements olelib.IInternetHostSecurityManager とすると

Private Sub IInternetHostSecurityManager_GetSecurityId _
            (pbSecurityId As Byte, pcbSecurityId As Long, Optional ByVal dwReserved As Long = 0&)

End Sub
などとSubプロシージャーが定義されますが、これをどのようにしたら
別ドメインのフレームを制御する事ができるのでしょうか?

google等で海外サイト含め調べても、私が理解できそうなものが
殆どありません。(改めて初心者レベルを実感。トホホ・・

宜しくお願いします。


魔界の仮面弁士  2005-12-17 18:49:44  No: 128972

> 上記の実装についてもう少し具体的にアドバイスをいただく事は
> 可能でしょうか?

不可能です。人にアドバイスできるほどのレベルに達していませんので…。

それに残念ながら、私が実験したのは(VB6ではなく)VB.NET 2003です。
(それも、下記を VB.NET に読み替えて、GetSecurityId の実装を修正しただけ)
http://www.divakk.co.jp/aoyagi/csharp_tips_wbzone.html


魔界の仮面弁士  2005-12-17 22:20:05  No: 128973

> 不可能です。
と斬り捨てるのも何なので、一応 VB6 で書き直してみました。

ただ、理解した上でコーディングしているわけじゃないので、
内容については、まったく保証できませんし、質問されても
まるで答えられませんけど。(^_^;)

http://www.ocv.ne.jp/~oratorio/junk/Sample/40/ZoneTest.lzh


なお実行前には、必ず、エラートラップモードを、
『エラー処理対象外のエラーで中断』モードにしておいてください。


IMA  2005-12-18 07:38:56  No: 128974

魔界の仮面弁士さん
最初のコメント
> 不可能です。人にアドバイスできるほどのレベルに達していませんので…。
で参考情報のC#のコードをVBに変換?で自分のスキルで可能か?と
大いに無い知恵を絞りながら考えていました。

そうしていましたら、VB6に変換したサンプルまで作成いただき
大変感謝しております。

まだ、これを少しながらでも解析し自分のソフトへ組み込むのは
道が長いと思いますが頑張ってみます。
このスレッドは、とりあえず解決とさせていただきます。

魔界の仮面弁士さん、どうもありがとうございました。


※作成する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。







   このエントリーをはてなブックマークに追加