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

投稿日: 2003/04/02(Wed) 11:39
投稿者魔界の仮面弁士
Eメール
URL
タイトル再帰的に取得しなくて良いのですか?

> 理由はよく分かりませんがieDoc.frames.item(n).documentがオブジェクトとなっていた為だと思われます。
理由というか……。(^_^;)

documentプロパティはdocumentオブジェクトを返す仕様ですから、そもそも
documentプロパティがオブジェクト以外の物を返すことはありえなかったりします。


> HTML分の取得に関してもieDoc.frames.item(n).document.documentElement.outerHTML
> にて完全に取得できました。
そのコードでは、完全には取得出来ないかと思います。

documentElementプロパティは、文書構造のルートノード(通常はhtmlエレメント)を返しますので、
    http://www.momo-lab.net/
のように、最初にDOCTYPE宣言があった場合、
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html401/strict.dtd">
の部分が抜け落ちてしまい、HTMLタグ以下の内容しか取得されないはずです。

# ちなみに上記ページの場合は、ieDoc.childNodes(0).text でDOCTYPE宣言部、
# ieDoc.childNodes(1).outerHTML で htmlタグ以下の内容が取得されます。


> 教えて頂きましたサンプルコードは以下の用にカスタマイズいたしました。
カスタマイズした事によって、『再帰処理』ではなくなってしまいましたね。(^-^;)
これだと、一階層分のフレームセットにしか対応できなくなってしまいますよ。

No.3348にも書きましたように、Webページの中には、
  「フレーム内のページが、さらにframesetを使っている文書」
というのもあります。

例えば、『http://www.asahi-net.or.jp/~rg7f-tkhs/frame6.html』をサンプルに挙げれば、
この文書の左上の水色部のフレームの内容は、
    ieDoc.frames.item(0).document.frames.item(0).document.documentElement.outerText
のように、frames取得後、さらにframesを辿らないと取得出来ません。

これは、上記のWebページが、

===== 一番外側の [frame6.html] ======
  <frameset rows="*,*,*">
     <frame src="frame4.html" name="framea">
             :
  </frameset>

===== その内側の [frame4.html] ======
  <FRAMESET COLS="40%,60%">
     <FRAME SRC="framemenu.html" NAME="framemenu" SCROLLING="YES" MARGINWIDTH="20" MARGINHEIGHT="20">
             :
  </FRAMESET>

===== さらにその内側の [framemenu.html] ======
  <body bgcolor="#33FFFF">
    <h3>フレームのメニュー</h3><p>
             :
  </body>

======================================

のように、フレーム内でさらにフレームを使っているからです。

こうしたページの場合は、No.3368 のサンプルのように、フレーム内の
documentを再帰的に処理していかないと、全文書を列挙できないわけです。


# なお、インライン フレーム(iframeエレメント)の内容も
# 表示させたいのであれば、さらにもう一工夫が必要ですね。


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

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

- Web Forum -