VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 2003/04/01(Tue) 10:56
投稿者魔界の仮面弁士
Eメール
URL
タイトルRe: IEオブジェクトのDocumentオブジェクトについて

>  '--IEオブジェクトのドキュメントを変数に格納
>  Set ieDoc = ie.Document
>  Debug.Print ieDoc.documentelement.outertext
>  ↑ここでBODYのテキストが表示されなくて困っています

おそらく、フレームセットが原因だと思います。


1) ieDoc.frames.length の値を確認してみてください。
   現在のコードのままですと、framesetが使われているページに対応できません。

   もし、フレーム組みされたページの内容を取得したいのであれば、
   For Eachなどを使って、framesコレクションを列挙し、個々のフレーム内の
   documentプロパティを個別に取得していくようにしてみてください。
  
   なお、フレーム内のページが、さらにframesetを使っている事もありますので、
   framesコレクションの呼び出しは、再帰的に行う必要があります。


2) IEでWebページ以外の文書を開いていた場合、documentプロパティから、
   IHTMLDocumentインターフェイス以外のオブジェクトが
   返される可能性があります。

   TypeOf演算子かTypeName関数を使って、ieDocのオブジェクトの型を
   事前に調べるようにする事をお奨めします。

# なお、documentオブジェクトのdocumentElementプロパティは、IE5からの実装です。
# IE4以下の環境で動作させる事はできませんので、その点は御留意下さい。


> Public Function SetIEObject()
戻り値のデータ型が書かれていないみたいですよ。


>    Dim sw As New SHDocVw.ShellWindows
既にご存知かも知れませんが、実行時バインド(late binding)で書く場合は、
  Dim sw As Object
  Set sw = CreateObject("Shell.Application").Windows()
で取得出来ますね。


>    bWindowShowFragg = False
>    For i = 0 To sw.Count - 1
変数 bWindowShowFragg、および i が宣言されていないようです。
(ところで、Fragg ではなく Flag なのでは無いでしょうか?)


>  '--実行ファイルのフルパスを調べてEXEファイル名でエクスプローラーとIEを判定
>  If Right(ie.FullName, 12) = "IEXPLORE.EXE" Then

FullNameプロパティが返す文字列による判定ではなく、
Documentプロパティが返すデータ型による判定をお奨めします。


現状のie.FullNameによる判定には、幾つかの問題点があるかと思います。

私の環境では、ie.FullNameが返す値として、以下のような物があります。
"C:\Program Files\Internet Explorer\iexplore.exe"
"C:\WINDOWS\Explorer.EXE"
"C:\Program Files\Microsoft Visual Studio .NET\Common7\IDE\devenv.exe"

右側12文字を取ってみると、"iexplore.exe"はあっても、"IEXPLORE.EXE"は無いのです。

これだけであれば、UCase関数で大文字化してから比較すれば対処できるのですが、
先述の(2)にも書きましたように、documentはHTML以外を返すことがありますので、
ie.FullNameだけで判定してしまうと、「IEのアドレスバーに"C:\"などと書いて開いた場合」や、
「エクスプローラのアドレスバーに、URLを指定して開いた場合」あるいは、
「IEでOffice文書を開いている場合」などに対応しきれないかと思います。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -