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

投稿日: 2003/04/01(Tue) 11:59
投稿者しんじ
Eメール
URL
タイトルRe^2: IEオブジェクトのDocumentオブジェクトについて

魔界の仮面弁士さん。
ありがとうございます。

> 1) ieDoc.frames.length の値を確認してみてください。
>    現在のコードのままですと、framesetが使われているページに対応できません。
>
>    もし、フレーム組みされたページの内容を取得したいのであれば、
>    For Eachなどを使って、framesコレクションを列挙し、個々のフレーム内の
>    documentプロパティを個別に取得していくようにしてみてください。
>  
>    なお、フレーム内のページが、さらにframesetを使っている事もありますので、
>    framesコレクションの呼び出しは、再帰的に行う必要があります。

上記の件了解いたしましたがどのような手法で再帰化して良いのかわかりません。
何処を判定させて再帰を終わらせるのか?
という部分がグレーになっています。
大変お手数ですがIEフレームの再帰化のサンプルコードなど教えていただけないでしょうか?
ご指摘いただいた通りframesetが使用されているページです。

> 2) IEでWebページ以外の文書を開いていた場合、documentプロパティから、
>    IHTMLDocumentインターフェイス以外のオブジェクトが
>    返される可能性があります。
>
>    TypeOf演算子かTypeName関数を使って、ieDocのオブジェクトの型を
>    事前に調べるようにする事をお奨めします。


そんな事全然考えつきませんでした。
本当に勉強になります。
この件は早速コードに加えたいと思います。

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

この問題はソフトウェアの動作条件をIE5以上に設定いたします。
これはイントラネットのセキュリティ規定でIE5のSP2以上というのがあるので簡単にクリアできます。
また、大変勉強になりました!

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

申し訳ないです。
本当はString型の文字列を返す予定だったのですが、まだそこまで行き着いておりませんでした(笑)

> >    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 なのでは無いでしょうか?)

bWindowShowFraggに関しては不必要な変数でしたのでこちらはカットしました。
本来のコードはもっと関数が含まれていたので不必要な部分はカットしてUPしたのですが
こちらを消し忘れていました。。。。。涙
字間違えていますね。
かっこ悪い。。。。。
うぅ...


> >  '--実行ファイルのフルパスを調べて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文書を開いている場合」などに対応しきれないかと思います。

なるほどですね。
IEとExplorerの判定はいくつかの方法がありますが、一番手っ取り早い
FULLNAMEを使用していましたがそもそもの考え方が間違っていたのですね。
本件はDocumentプロパティが返すデータ型を検証すれば解決できそうです。(^_^)

この辺りの事に詳しい人も少なくWEBにもなかなか情報が無い為本当に感激しております。
本件に関しては8時間程はまってしまっており、情けない限りです。
勉強をしてまだまだ精進していかねば。。。。。。


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

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

- Web Forum -