• 締切済み

フレームを指定して結果を出力するには?

2つのフレームに分割されたサイトを作っています。 仮に、フレームをAとBとします。 AのフレームはCGIで、フォームアクション用のボタンが一つ表示させています。データの送信先は、自身のCGIです。 このCGIで、処理結果によって、表示する(起動する)フレームを分けたいと思っています。 ある結果であれば、全てのフレーム(_top)をリロード、別の結果であれば、自身(_self)のような感じです。 かなり前から悩んでいるのですが、なかなか解決出来ません。こちらの履歴も調べたのですが、ズバリの回答は見つける事が出来ませんでした。 お分かりになる方がいらっしゃいましたら、お教え下さい。 よろしくお願いします。

  • Perl
  • 回答数4
  • ありがとう数2

みんなの回答

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.4

#2 です。 こういうことをしたいのではないかという具体的なものを作ってみました。 これであっていますか? 間違っている場合、具体的にどこが違うのでしょうか? #!/usr/local/bin/perl # データデコード処理 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/\n//g; #フォーム変数へ $F{$name} = $value; } if ($F{'frame_a'}) { print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>A</TITLE></HEAD>\n"; print "<p>ここはフレームAです</p>\n"; if ($F{'a'}) { print "<p>処理しました</p>\n"; } print "</BODY>\n"; print "</HTML>\n"; } elsif ($F{'frame_b'}) { print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>B</TITLE></HEAD>\n"; print "ここはフレームBです<br>\n"; print "<form action=\"_top.cgi\" target=\"_top\">\n"; print "<input type=\"submit\" name=\"fa\" value=\"フレームのまま変更\">\n"; print "<input type=\"submit\" name=\"fb\" value=\"全画面変更\">\n"; print "</form>\n"; print "</BODY>\n"; print "</HTML>\n"; } else { if ($F{'fb'}) { print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>frame</TITLE></HEAD>\n"; print "<h3>処理終了</h3>\n"; print "<p><a href=\"_top.cgi\">もどる</a></p>\n"; print "</BODY>\n"; print "</HTML>\n"; } else { print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>frame</TITLE></HEAD>\n"; print "<frameset cols=\"40%,*\">\n"; print "<frame src=\"_top.cgi?frame_a=1&a=$F{'fa'}\" name=\"a\">\n"; print "<frame src=\"_top.cgi?frame_b=1\" name=\"b\">\n"; print "</frameset>\n"; print "</BODY>\n"; print "</HTML>\n"; } }

  • SHOO-3
  • ベストアンサー率56% (28/50)
回答No.3

#1です。 自分の案は、読み込みと同時に_topを別のページに飛ばしてしまうというものです。 CGIで、scriptを書き出すようにするのですが、JavaScriptを一朝一夕で思い通りに動作させるのは難しいでしょう。(習得は比較的簡単ですが。) #2さんの方法(フレームをまとめるページをCGIにしてしまう方法)か、もしくはフレームを用いない方法(2列1行のtableを使うとか、スタイルシートの指定でスクロール付の要素を作るとか)を検討したほうがいいかもしれません。 そこまで詳しく調べたことは無いのですが、CGIの処理から_topへリダイレクトさせるのは、おそらく無理です。 あるフレームにほかのHTMLページを読み込んだあとに、そのページの表示段階でフレームの指定を無視して_topに表示先を変更することができないのと同じです。 親フレームをCGIにしたり、JavaScriptを用いることで無理やりやることもできますが、どうしても動作が汚らしくなってしまうので、避けることをお勧めしておきます。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

私ならば。 逆の発想で、とりあえず_topで更新。 結果がAならばそのまま。 結果がBならばフレームを作る(更新前と同じようにする) とします。

arvent
質問者

補足

あるフレームのcgiから_topへリダイレクトする方法がお分かりでしたらそれをお教え頂けませんでしょうか? あるフレームのcgiの表示結果に_topへのリンクがあって、それを押すのではなく、cgiの処理の中から_topへリダイレクトさせたいのです。 よろしくお願いします。

  • SHOO-3
  • ベストアンサー率56% (28/50)
回答No.1

CGIからの操作ではできない気がするので、出力後、JavaScriptなどを使って操作するのが良いかと思います。

arvent
質問者

お礼

早速のご回答ありがとうございます。 ただ、JavaScriptについてはほとんど無知なので、方法を詳しくお教え頂けませんでしょうか。 出来ないとなると、AフレームにおけるCGIの結果は、Aフレームに対して、HTMLを書き出す事になると思います。 そのHTMLの中にJavaScriptも組み込んで書き出す、という事だと思いますが、そのJavaScriptは自動的に、_topをリロードするような事が出来るのでしょうか。出来るのであれば、どのようなスクリプトをHTMLの中に書けばよいのでしょうか。。 分からない事ばかりですみません。よろしくお願いします。

関連するQ&A

  • 【CGI】表示先のフレームに結果を残したまま次の結果を表示したい

    上下分割フレームで、上側にCGI、下側に仮ページとしてHTMLを置いています。 上側のCGIに数値を入力して送信ボタンを押すと、下側のページに結果が表示されるようになっています。 そこで質問です。 送信ボタンを押して結果が表示されますが、もう一度、今度は違う数値を入力して送信ボタンを押すと、先ほど表示されていた内容が消えて、新しい内容が表示されます。 これを、先ほどの結果を残したままさらにその下に次の結果を表示にするにはどうすればいいでしょうか? よろしくお願いします。

    • ベストアンサー
    • CGI
  • 複数のCGIにデータを渡したい

    現在、2分割のフレームでA.cgi(frame1)とB.cgi(frame2)を表示させています。 <form method=post action="A.cgi" target="frame1"> <input type=submit value="name"> </FORM> でA.cgiにnameが送信された結果がframe1に表示されますが、この1つのボタンクリックで同時にnameをB.cgiにも送信し、結果をframe2に表示させるにはどうしたらいいでしょうか?

    • ベストアンサー
    • CGI
  • 検索結果の出力先を違うフレームに表示したい

    こういうフレーム分割ページがあって、 ┏━━━━━━━ ┃name="A" ┣━━━━━━━ ┃name="B" ┃ ┃ ┃ ┗━━━━━━━ 上段(name="A")に↓のような検索フォームをおきます。 <form method="action" action="list.php"> list.phpが検索結果を出力する際に、このままだと 上段(name="A")に検索結果が展開されてしまうのですが、 下段(name="B")に展開したいのです。 山勘で、 <form method="action" action="list.php" target="B"> とtarget属性をつけてみましたがだめでした。 ここでは、どのように記述したらよいでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • formデータ送信時にフレームページとフレーム名を指定する方法

    お世話になっております。 質問ですが、メールフォームのformデータを送信する際、プレビュー機能や送信完了メッセージがでます。 普通はformタグでaction="http://~/abc.cgi"とすれば送信ボタンを押すとabc.cgiが開いて確認画面等がでるのですが、私の場合は フレームページではない送信する内容を書くところ から↓ フレームページである123.htmlの『1』というフレーム名のところにプレビューや送信完了メッセージをだしたいのです。(要するにフレーム名『1』にabc.cgiを表示させたい) いろいろ記述法を探したのですがいまいちわかりません^^; どなたか具体的にご伝授いただければ幸いです。 ちなみにmethodはpostです。 よろしくお願いいたします。m(_ _)m

  • CGIのアクション結果をフレームの中に入れるには?

    質問の表現が難しいのですが、 CGIのアクションの結果を、フレームの中の一つとして表示したいのです。 例えば、 http://www.fresheye.co.jp/ の無料メールのように、 ログイン結果をフレーム構成にしたいのです。 そのときに、表示する内容を href=aaa.cgi?id=xxx&password=xxx などと記載すると、リダイレクトで表示は出来るものの、 パスワードなどは丸見えになってしまいますよね? どうしたら、 (1)ソースコードに引数を表示させず (2)フレームの構成で表示させることが出来るのでしょう? 内容が伝わらなければ補足させていただきます。

    • ベストアンサー
    • CGI
  • 直リンクされた場合のフレームセットのリンクを変更したい

    フレームセットを利用していると直リンクされると、レイアウトが崩れて嫌なので普段は <body onLoad="if (top == self) { location.replace('index.html') };"> このタグで強制的にフレームセットのページであるindex.htmlにリロードしています。 でも、この場合だとindex.htmlにフレーム設定をしているA.htmlとB.htmlしか表示できません。 これを、直リンクされた場合に強制的にindex.htmlに飛んで、さらにフレームセットのページをA.htmlとC.html(直リンクされたページ)に変更させたいのです。 なんとなくJavaScriptで出来るかな思いましたが、CGIでも構いませんので、よろしくお願いします。

  • フレームひとつだけ、リロードできない?

    main,menu.detail(.html)の3つのフレームに分割したホームページでmenu画面から選択してdetail画面に表示するようにしていますが、更新して転送し確認するためリロードするとdetail画面がトップ画面に切り替わってしまいます。現在表示されているdetail画面のままリロードできないでしょうか?

  • フレームセットのリンクを変更するCGI

    フレームセットを利用していると直リンクされると、レイアウトが崩れて嫌なので普段はJavaScriptで <body onLoad="if (top == self) { location.replace('index.html') };"> このタグで強制的にフレームセットのページであるindex.htmlにリロードしています。 でも、この場合だとindex.htmlにフレーム設定をしているA.htmlとB.htmlしか表示できません。 これを、直リンクされた場合に強制的にindex.htmlに飛んで、さらにフレームセットのページをA.htmlとC.html(直リンクされたページ)に変更させたいのです。 index.htmlを表示させた後、C.html(直リンクされたページ)のアドレスを取得してフレームセットを書き直すCGIなのだと思いますが、このようなCGIのフリーなどありましたら教えてください。 JavaScriptとCGIの混合技らしいので、JavaScriptカテゴリにも書き込んでおります。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=745359

    • ベストアンサー
    • CGI
  • cgiにフレームをかけたら動作しなくなりました。

    cgi初心者です。よろしくお願い致します。 cgiが完成したので、それにフレームをかけ、cgiからsendmailへの送信内容を変更したのですが、変更されず前のまんまで送られてきてしまします。 AAA.html(フォーム)→AAA.cgi→BBB.htmlというものに、すべてTOPフレームをかけてフレームセットとしたらそうなりました。 フレームセットにしてからリンク先を何も変更しておりません・・・そのせいでしょうか??? 一体どうしてこんなことになってしまったのでしょうか?またこれを回避する方法があると思うのですが、教えていただければ幸いです。よろしくお願い致します。

    • 締切済み
    • CGI
  • cgiで表示したフレームに結果を表示したい

    cgiで作成した画面でフレームを左右に分割したのですが、 内容が表示できません。 cgiで作成したフレーム分割した画面に 結果を表示させる方法を教えてください。 (cgiの記述の仕方が間違えているのか?  htmlの<frameset>、<frame>タグの設定の仕方が悪いのか?  そもそも全体の流れの考え方が間違えているのか?  分からず、行き詰ってしまっています…。) どうか宜しくお願いいたします。 ■作成したファイルは下記のような仕様です。 TEST.html :ボタン操作で、AAA.ccを実行する。 AAA.cc   :作成した画面上のリンクをクリックすることでBBB.ccを実行する。         画面は左右にフレーム分割し、         左側フレームにAAA自身の実行結果として取得したファイルのリストを         右側フレームにファイルリストでリンクした画面を表示させる。 BBB.cc  :AAAから指定されたリンクを加工して開く。 ■ファイルの内容は下記のような感じです…。 >>>TEST.html <form action="**パス**/AAA"> <input type="hidden" name="path" value="**AAAに渡すデータ**"> <input type="submit" value="リスト"> </form> >>>AAA.cc cout << "<frameset cols=\"30%,*\">" << endl; cout << "<frame src=\"**パス**/\" name=\"listA\">" << endl;  :(省略) cout << "<a href=\"**パス**/BBB?path=" << BBBに渡すデータ << "\" target=\"ContensB\" >" << endl;  :(省略) cout << "<frame src=\"**パス**/\" name=\"ContentsB\">" << endl; cout << "<html>" << endl; cout << "<head>" << endl; cout << "<title>Contents</title>" << endl; cout << "</head>" << endl; cout << "<body>" << endl; cout << "</body>" << endl; cout << "</html>" << endl; cout << "</frameset\">" >>>BBB.cc  :(省略) cout << getContents() << "<br>" << endl;  :(省略) どうか宜しくお願いいたします。

    • ベストアンサー
    • CGI