フレームの解除について

[上に] [前に] [次に]
fumi [E-Mail] 1999/08/19(木) 14:04:40
はじめのメイン画面を上下のフレームに分け、
上フレームのリンクをクリックするとフレームが解除されて
次のhtmlが表示され、下フレームのリンクをクリックすると
WindowsのFTPダウンロードのメッセージ画面を表示する機能にしたいのですが、
formタグのtarget属性ではうまく行きません。(どちらか一方なら
うまくいくのですが)
何方か別の方法をご存知の方がいましたら、教えてください

Tmb 1999/08/19(木) 14:51:34
上下のそれぞれのリンク部分は,どのように記述されてますか?

「どちらか一方ならうまくいく」というのであれば,その書き方に問題が
あるような気がしますので,その部分を示していただければ何か判るかも
しれないです。

fumi [E-Mail] 1999/08/19(木) 15:13:16
失礼しました。
上フレームはsubmitボタンを使用し、hiddenのvalueで
イベント名を示してそのイベントを走らせます。
下フレームはherfでjavascriptの関数を指定し、
titleでダウンロードしたいファイル名を指定しています。
これで手がかりになるでしょうか?

Tmb 1999/08/19(木) 15:26:27
も,もう少し詳しくお願いします (^^; というより,当該部分のソースを見せて下されば。

#文章にして説明されるより,ソースを見たほうが判りやすいですから。

どの仕組みを使ってるか(<A href>か,submitか,JavaScriptか etc)だけでなく,
どこでtargetを何に指定してるかとか,その他の情報が知りたいので。

fumi 1999/08/19(木) 15:59:46
上フレーム
<FORM  METHOD=POST NAME="f" TARGET="_top">
<INPUT TYPE="hidden" NAME="button" VALUE="GR01SiteiIn_TEST_Btn">
<INPUT TYPE="submit" VALUE="テスト" onClick="return(JS_EventControl())">
↑クリックされた時、return(JS_EventControl())はjavascreptイベントが複数走るのを防ぐ関数
下フレーム
<FORM METHOD=POST NAME="f" TARGET="_self">
<A HREF="JavaScript:Exec_GR01Download_Download('http://ABC/CSV/TEST.dat', 1);" TITLE =TEST.dat >売上一覧</A>
↑Exec_GR01Download_Downloadの引数の1つめはダウンロードしたいファイルのurlで2つめはテーブル表示になっているので
それの何番目かのインデックスを取得しています。
今度はどうでしょうか?

Tmb 1999/08/19(木) 16:25:15
ぱっと見た感じ,上のには問題がないような。
#でもactionのないsubmitって・・・?

あとは下フレームで使ってるJavaScriptのソースを見せてもらわないことには。

<A>は別にFORMの子要素ではないから,いくら中に挟んだとしてもFORMのtarget
指定は無意味だと思いますが。
普通の場合なら<A>に直接target指定すればいいですが,JavaScript呼び出しと
なるとちょっと事情が変わってきますので。
#中で正しくsubmitしてるんなら動くはずだと思いますけど。

それから<BASE target>は使ってませんか? 念のため確認。

fumi 1999/08/19(木) 16:35:05
上フレームのsubumitのイベントはhiddenのvalueで指定したイベントです。
それから、<BASE target>は使っていません。

下フレームjavascriptのソースです。
function Exec_GR01Download_Download(url,index)
{
  window.top.frame1.document.f.button.value='GR01Download_Download_Btn';
  window.top.frame1.document.f.GR01_Select_No.value = index;
  window.top.frame1.document.f.submit();

  // ダウンロード済マーク(一時的)
  index = index % 10
  if (index == 0 )
  {
    index = 9
  }
  else
  {
    index = index - 1
  }

  Dw[index].innerHTML = '<FONT SIZE=2>○'

  // ダウンロード画面の表示
  self.location.href = url;
}
わかりにくくてすみません;

愚者 1999/08/19(木) 16:48:53
index.htmlのソース
<FRAMESET ROWS="50%,50%">
<FRAME SRC="xxx.html" NAME="top">
<FRAME SRC="yyy.html" NAME="bottom">
</FREMESET>

xxx.htmlのソース
<FORM ACTION="???" METHOD="???" TARGET="_top">
〜〜〜〜〜〜
</FORM>

yyy.htmlのソース
<FORM ACTION="???" METHOD="???">
〜〜〜〜〜〜
</FORM>
で新しいhtmlファイルを作ればよいのでは?
ん?なんか意味がちがうかな?

愚者 1999/08/19(木) 17:03:11
あっ すいません、質問よく読んでなかったです。
>下フレームのリンクをクリック
でも上と同じようにフレーム解除するんですか?
ターゲットをしっかりすれば大丈夫だと思いますが、、、

Tmb 1999/08/19(木) 17:13:47
>下フレームjavascriptのソースです。
(略)
>window.top.frame1.document.f.submit();
もしかして原因はこれではないですか?
下フレームの関数が呼び出されると上のフォームがsubmitされ,その時点で
フレームが解除されてしまうとか。
#一応,この行だけコメントにして確認していただければ。

もしそうなら,この行の前に
window.top.frame1.document.f.target="_self"
を付けてみるとか。

#使ったことないので動作するか判りません。
#それともしかしたら"_self"でなくwindow.top.frame1という形
#で指定するかも。もっともそれ以前に,書き換え可能かどうか確認してないですが。

fumi 1999/08/19(木) 18:01:05
javascriptのソースを
  ・・・・・・
  window.top.frame1.document.f.target="_self"
  window.top.frame1.document.f.submit();
  ・・・・・・
のように修正したところ
上下ともきちんと機能しました。
  ・・・・・・
//  window.top.frame1.document.f.submit();
  ・・・・・・
でも機能します。
ただ、
  ・・・・・・
  window.top.frame1.document.f.target=window.top.frame1
  window.top.frame1.document.f.submit();
  ・・・・・・
だと、ダウンロード画面でキャンセル後、上フレームhtmlが全画面表示に
なってしまいます。

それから、下フレームのリンクは、フレームの解除を行わないので、
下フレームの<FORM>でtargetを指定してもしなくても
どちらでもよいようです。
おかげさまで解決しました。ありがとうございました。

Tmb 1999/08/19(木) 18:07:45
老婆心ながらもう1つだけ補足。
>window.top.frame1.document.f.target="_self"
>window.top.frame1.document.f.submit();
の後に,今度は
window.top.frame1.document.f.target="_top"
を付けておいた方がいいかもしれません。

#あるいは上のフォームのsubmitのonClick時の関数に,このtargetを"_top"にする
#一文を追加するとか。

そうしないともしかしたら,下のリンクでダウンロード→上のボタンでsubmit
したとき,上のボタンを押してもフレームが解除されなくなるかもしれませんので。

fumi 1999/08/20(金) 14:00:29
[[解決]]
上フレーム<form>でtarget="_top"を指定しない場合、Tmbさんが補足で
かいてくれた記述がないとフレーム解除ができませんが、
targetを指定した場合、記述がなくても大丈夫のようです。
が、念のため<input type=submit>にtarget="_top"を追加しておきました。
(javascriptの方でもよいのですが、後で分かりにくいと思ったので...)

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