AフレームからBフレームの確認をするには?

[上に] [前に] [次に]
ミナ 2000/06/02(金) 01:42:11
こんばんわ  ミナといいます。
フレーム二分割で、AフレームからBのフレーム内のページが読み込まれたか、
また、Bフレーム内にデータが存在するかどうか、とかいうような
事を javascript で調べることは可能でしょうか?
可能ならば、どう記述すればよろしいのでしょか?
どうかよろしくお願いします。。m(__)m

バギンズ 2000/06/02(金) 05:06:25
もう1つダミーのCフレームとかを作り、Bのフレームがロードされた時の
onLoadイベントで、CフレームのLocationを変更しましょう。
(BフレームからCフレームをparent.CFrame.document.writeで
直接書き替えてもロケーションが変わると思います)

あとは、AフレームでCフレームのロケーションが変更されるまで
タイマー等でチェックしながら待てばいいだけです。
何らかの原因でBフレームが読み込まれなかった事を考慮し、
タイムアウトの処理を入れておくように。

>また、Bフレーム内にデータが存在するかどうか、とかいうような
>事を javascript で調べることは可能でしょうか?
意味がよくわかりません。
Bフレーム内のデータは自分で用意するのではないのですか?

あっそれから、フレーム間でデータ参照等を行う場合は、同一サーバー内の
アドレスにしておかないと、ブラウザのセキュリティに引っかかる可能性が
ありますのでご注意ください。

ミナ 2000/06/02(金) 06:14:25
バギンズさんありがとうございます。。
説明下手でごめんなさい・・m(__)m
フレームのページを読み込んだときに、どちらかが先に読み込まれてしまい
片方がなかなか読み込まれないときありますよね・・・?
AフレームにBフレームからのスクリプトを読み込むようにしています。
Aが先に完全に読み込まれてもBがまだ読み込まれない場合にエラーが出てしまいます
これを回避するのに、Bが読み込まれて無い場合にスクリプトを実行しないようにしたいのです。。

現在はBフレームのリンクを参照して無い場合に実行しないようにしていますけど、
リンクの無いページもありますので・・・他に何か良い方法は無いかと思いまして・・
みなさんのお知恵をお借りしようと思いまして・・・どうかよろしくお願いします。。

うぐいす 2000/06/02(金) 18:30:57
試していないので、ちょっと不安ですが・・・。

Aに何か変数を用意します。(例えばbloadflg)
BのbodyタグのonLoadにA.bloadflgの値を変える処理を書きます。
A.bloadflgが書き換えられていれば、AはBのスクリプトを読みに行きます。
というふうにしてみてはどうでしょう?

Aフレームに来るファイルが1種類しかないのでしたら、
BのbodyタグのonUnloadでA.bloadflgを初期値に戻すようにすれば、
次のファイルを読み込んでもBが表示されるまでは
Bのスクリプトを読みにいかないようにできると思います。

ミナ 2000/06/03(土) 01:21:11
[[解決]]
うぐいすさんありがとうございます。。
Aの方に変数を用意した場合、Bが先に読み込まれてしまった場合に動作しなかったので、
Bの方に変数を用意して、その変数がたとえば、1 とかなら実行するようにして
なんとかうまくいきました♪。。

この数値の数値を利用しても少しスクリプトを簡単に出来そうです。。f^^;
ほんとにありがとうございました。。m(__)m

バギンズ 2000/06/03(土) 02:53:37
2つのフレームだけじゃだめですって...
>Aの方に変数を用意した場合、Bが先に読み込まれてしまった場合に動作しなかったので、
>Bの方に変数を用意して、その変数がたとえば、1 とかなら実行するようにして
一緒ですよ。AとBが逆になっているだけでしょ。
サーバーや回線が軽いときにやっているからうまくいくだけで、
重くなったらアウトですね。
私が最初に書いたように3つ目のフレームが必要です。
っていうか、一番最初にその事をレスしているのに
無視されて大変遺憾ですけど...

ミナ 2000/06/03(土) 03:55:38
バギンズさんありがとうございます。
Aが先に読み込まれた場合はBの方で動作させていますので・・・
Aが読み込まれていない場合は、Bの方のスクリプトは動作しますけど
Aの方に反映されないだけで、エラーは出ないみたいので・・・
こういうやり方は良くないですか?

バギンズさんの無視したわけではないです。
ちょっと私には難しすぎて・・・あまり複雑なのは出来ないです・・(^^;;;
不快な思いされたならあやまります。 ほんとにごめんなさいm(__)m
ありがとうございました。。

あ、Aの方にもB用の変数を用意してAが読み込まれていない場合はB側も実行
しなしようにすればいいですね・・

うぐいすさん、バギンズさんほんとにありがとうございました。m(__)m

バギンズ 2000/06/03(土) 12:16:59
具体的に何をやろうとしているのかが、見えないのでよく分かりませんが、
読み込まれていないフレームを参照してエラーが出ませんか?
何故だろう???

ばびん 2000/06/04(日) 06:23:42
バギンズさんの言うとおりAでもBでもないところでチェックする必要はあると思います。
が、3つめのフレームがなくても可能ですよん。
変数を、AでもBでもなく、親にあたるframesetファイルに置いてしまえばいいんす。

バギンズ 2000/06/04(日) 16:07:27
>ばびんさん
>変数を、AでもBでもなく、親にあたるframesetファイルに置いてしまえばいいんす。
あっそれはやったことないです。そーいう手がありましたか。(^_^)
でも、なんか変だな。
互いのフレームがロードされてなくてもいいのなら、チェックもしなくて
いいような気がしますね。

ミナ 2000/06/05(月) 00:32:58
バギンズさん、ばびんさんこんばんわ
>バギンズさんの言うとおりAでもBでもないところでチェックする必要はあると思います。
>が、3つめのフレームがなくても可能ですよん。
これが私には分からないです・・・  そこまで知識ないです・・(/_;)
でも、もし・・仮に3つめのフレームを作ったとして
一つのフレームだけ先に読み込まれて後がなかなか読み込まれない場合いは?
2つだけでも同じだと思うんですけど・・・???

私のやりたかったことは、くだらない事かもしれないですけど・・
メイン側に表示されたページによって、メニュー側の背景色とボタンの変更をすることです。
通常はメニュー側が読み込まれていますから問題無いですけど、
リロードとか、Netscapeでのウインドウのサイズ変更で両側が読み込み直された場合の対応です。
現在は、メニュー側に変数に0を代入して それを各メイン側表示される書類ににチェックさせて、変数==0以外は実行しない、
各メイン側の書類にもそのページ用の数値を代入して、メニュー側でもチェックさせています。
指定した変数の数値以外は実行しないからページが読み込まれていない場合も実行しませんからエラーは出ませんけど・・・フレームが無いとエラーが出ますけど・・(新規ウインドウで開かれた場合)
説明下手だから良く分からないかも、、ごめんなさいね
これで何かおかしいですか??
両一緒に読み込まれた場合はダブル事になりますけど・・・(^^;;;
動作じたいはダブってるような感じはしませんので、毎回の事じゃないしこれでいいかな?
って思っていますけど・・・

ばびんさんの
>親にあたるframesetファイルに置いてしまえばいいんす。
これはいいですね。。この場合は opener で指定すればいいのでしょうか?
frameset ならかならず先に読み込まれますしね。。。

長くなってごめんなさい。。m(__)m

バギンズ 2000/06/05(月) 15:56:15
現状で特に問題がないというのであれば、かまわないのですが、
一応説明しておきます。

>一つのフレームだけ先に読み込まれて後がなかなか読み込まれない場合いは?
片方のフレームでタイマーを使用してもう1つのフレームが読み込まれるまで
待ちを行ないます。

AフレームがBフレームのロードを待つ場合の手順を
ばびんさんの方法で説明しますと、

まず、framesetファイルにJavaScriptの変数を1つ用意します。(初期状態=0)
#framesetファイルは必ず最初にロードされているはずなので
#この変数はフレームAからもフレームBからも参照や設定が可能となります。

フレームBに指定されたHTMLのonLoadイベントでframesetファイルの
変数に1をセットします。

フレームAに指定されたHTMLがロードされたとき、framesetファイルの
変数をチェックし、1ならフレームBは既にロード済みと判断できます
ので処理を行ないます。
0なら、フレームBはまだロードされていない為、タイムアウト用の
カウンタ変数に0をセットしてから、タイマーをセットしておきます。(1秒ぐらい)

タイマールーチンの中で再度framesetファイルの変数をチェックし
1ならフレームBはロードしたので処理を行ない、0ならタイムアウト用の
カウンタをカウントアップしてから再度タイマーをセットして待ちます。
もし、1分以上(1秒ごとならタイムアウト用のカウンタが60以上)
とか待ってもBがロードされなければ、「重くてロードできませんでした」
等のエラーメッセージを表示して、次のタイマーはセットしないようにします。

これで、タイムアウトになる前に両方のフレームがロードされれば
フレームAからフレームBを確実に参照する事ができます。

ミナさんがやりたい内容からすると、「そこまでする必要はない」と
思われるかもしれませんが、やりたい内容を教えてもらうまで
どのレベルまでやりたいのか判断がつかなかったものですから...

>>親にあたるframesetファイルに置いてしまえばいいんす。
>これはいいですね。。この場合は opener で指定すればいいのでしょうか?
parentじゃないですかね?topでもいけるかな?
まだ試していないので(^_^;)

ミナ 2000/06/05(月) 23:28:09
バギンズさん分かりやすい回答ありがとうございます
framesetに変数をおき、framesetを参照することで
ブラウザの 「新しいウインドウでフレームを開く」 でもエラーが出なくなりました。
framesetには、parent.変数名 でアクセスできました。
でも、framesetにした場合にIEで新たな問題が・・・(^^;;;
まだ、オフラインでの確認ですのでなんとも言えないのですが・・
IEで戻るボタンをクリックしたときに、オンロードイベントが発生
してくれません・・・・
前の状態の時は良かったのですが・・・
この件については、解決出来なければまた新規に質問させていただきますのて
その時はまたよろしくお願いしますね。。

回答していただいたみなさん、ほんとにありがとうございました。m(__)m

ばびん 2000/06/06(火) 00:18:00
IEでオンロードイベントが発生しない……ってのはMacでは?
WindowsIEでは大丈夫なはずですが。
となると、バギンズさんの3フレーム方式のほうが確実なのかな?

バギンズ 2000/06/06(火) 02:40:47
>IEで戻るボタンをクリックしたときに、オンロードイベントが発生
>してくれません・・・・
戻るボタンは勘弁でしょ...
っていうかネスケだとonLoadが発生するんですか?

ばびんさんにパス!(^_^;)

ミナ 2000/06/06(火) 05:07:08
あれ?? 発生しないんですか?
Macでは発生しますけど・・・?
A-B間の参照ではIEでも戻るボタンで正常に表示してくれましたよ。
framesetでは駄目なんてちょっと不思議ですけど・・
前に戻ったときにメニュー側が前のページのままだと変なので・・・(^^;;;
しばらくはこのままで行きますね。。

ばびんさんとバギンズさんの方法も勉強していきたいと思います。
また分からない事が有りましたらよろしくお願いします。

Shima 2000/06/06(火) 07:05:31
IE4以降のみの対応で良ければ、参照するフレーム側(A)から
  参照したいフレーム(B).document.readyState
の値を調べ、その値が "complete" であれば、フレーム(B)の内容
の読み込みが完了していると判断する事ができます。

ミナ 2000/06/07(水) 00:32:45
Shima さんありがとうございます。
IEのみでは、ちょっと良くないので・・私ネスケ派ですし・・(^^;;;
両方でエラー無く表示されるようにと思っていますので・・m(__)m
今、バギンズさんの方も試しているので分からなかったら、その時はまた
よろしくお願いすます。。

こちらの方は、一応解決ということで・・だらだらと引っ張ってしまってごめんなさい。
みなさんほんとうにありがとうございました。m(__)m

[上に] [前に] [次に]