WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:オブジェクトタグを使用した場合のフレーム間のやりとり方法

0:[投稿] T-184 [2006/10/06 16:21 ] [環境:わからない わからない]

フレームを使ったサイトでフレーム1とフレーム2とわかれていてフレーム1
にはA.html、フレーム2にはB.htmlが入っています。
B.htmlの中にOBJECTタグを使用して入れ子にしたC.htmlというものがあった
場合です。

C.htmlからA.htmlのエレメントオブジェクトを取得したいのですがパスの指定
でエラーが出てしまいます。どう指定したら取得できますか

var test = parent.フレーム1.document.getElementsByTagName('×××');
としたらエラーでした。

C.htmlを入れ子にせずB.htmlからの場合は上の方で取得できました。

説明の仕方が悪くてわかりにくいかもしれませんがお願いします。
ブラウザ:IE 6.0
OS:Windows XP pro


1:[回答] m035 [2006/10/06 20:36 ][URL]

parentではなく、topを使ってみてはどうですか。


2:[回答] T-184 [2006/10/09 09:28 ]

ご回答ありがとうございます。

topも試してみましたがうまくいきませんでした。
parent.parentもうまくいきませんでした。


3:[回答] tk [2006/10/09 14:32 ]

>var test = parent.フレーム1.document.getElementsByTagName('×××')
フレーム1の所ですが、ソースでも日本語で「フレーム1」って書いている訳ではないですよね?
a.htmlの表示される左のフレームの名前をLeftFrameとしています。
c.htmlで
var test =top.LeftFrame.document.getElementsByTagName('P');
でも、
var test =parent.parent.LeftFrame.document.getElementsByTagName('P');
エラーにはなりませんでした。


4:[回答] T-184 [2006/10/09 17:51 ]

ご回答ありがとうございます。
フレーム1はソースでは「Lframe」としています。

オブジェクトタグの使い方がおかしいのでしょうか?
具体的には下のようにしています。

B.htmlのソースの一部
<body>
<DIV STYLE="POSITION:absolute;LEFT:10px;TOP:145px;zindex:2;">
<OBJECT ID="frame_c" DATA="c.html" TYPE="text/html" width=230 height=200 >
</OBJECT>
</div>
</body>

'top.Lframe'はNullまたはオブジェクトではありません。とエラーがでます。


5:[回答] T-184 [2006/10/10 10:12 ]

テスト用にソースを作成しましたので長くてご迷惑かと思い
ますが貼らせてください。
b.htmlのボタンからはエラーにならないのですがc.htmlから
はどうしてもエラーになってしまいます。

index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=shift_jis">
        <title>home</title>
    </head>
    <frameset cols="80,*">
        <frame name="LeftFrame" src="a.html" noresize>
        <frame name="RightFrame" src="b.html" noresize>
    </frameset>
</html>

a.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
    <head>
        <meta http-equiv="content-type" content="text/html;charset=shift_jis">
        <title>a.html</title>
    </head>
    <body>
        <p>p</p>
        a.html<br>
    </body>
</html>

b.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
    <head>
        <meta http-equiv="content-type" content="text/html;charset=shift_jis">
        <title>b.html</title>
        <!--
            function testb() {
                var test = top.LeftFrame.document.getElementsByTagName('P');
            }
        //-->
    </head>
    <body>
        b.html<button name="buttonName" type="button"  onclick="testb();">ボタン</button>
        <DIV STYLE="POSITION:absolute;LEFT:10px;TOP:145px;z-index:2;">
        <OBJECT DATA="c.html" TYPE="text/html" width=230 height=200 >
        </OBJECT>
        </DIV>
    </body>
</html>

c.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
    <head>
        <meta http-equiv="content-type" content="text/html;charset=shift_jis">
        <title>c.html</title>
        <script type="text/javascript">
        <!--
            function testc() {
                var test = top.LeftFrame.document.getElementsByTagName('P');
            }
        //-->
        </script>
    </head>
    <body  scroll="no">
        c.html<button name="buttonName" type="button"  onclick="testc();">ボタン</button>
    </body>
</html>


6:[回答] tk [2006/10/10 20:11 ]

すいませんIE6で確認してませんでした。
c.html→b.htmlでも上手い事いきませんね。
object要素をiframe要素に変えると問題無いようですが・・・・


7:[回答] T-184 [2006/10/11 09:52 ]

c.html→b.htmlへのテストまでしていただいて申し訳ありません。

本番では他のオブジェクトに重ねてリストを配置する予定でした
がiframeですとリストダウンの時に表示が後ろに隠れてしまうといったことがあって断念しました。

ちなみにtkさんはどのブラウザで成功しましたか?
FirefoxとOperaで試したのですが両方うまくいきませんでした。


8:[回答] tk [2006/10/12 22:32 ]

safari,Firefox,IEでは成功しました(当方Macユーザーです。
その後,winのIE6で失敗の確認をしました。
WindowsとMacでは結果が違うかもとも思いましたが、やはり違うのですねぇ。

回答(必須): 状態:

お名前(必須):

URL:




[戻る]