メモのコツを教えてください!

別サイトの特定のフレームへPOSTすることは可能でしょうか?

あるサイトがあります。
http://hogehoge.com/kensaku/index.html

このページは親フレームとなっており、
header, side, mainの3つの子フレームがあります。

そのページのmainのフレームへPOSTしたいのですが、
記述方法が違うのか、そもそも不可能なのかわかりませんが、
うまくいきませn

<やったこと1>
methos="post"
action="http://hogehoge.com/kensaku/index.html"
target="main"
■結果:htmlはPOSTを受け取れないのでエラー

<やったこと2>
methos="post"
action="http://hogehoge.com/kensaku/kensaku.cgi"
target="main"
■結果:値は受け取れたが、子フレームが直接表示される。

知恵をおかしください!

A 回答 (8件)

遅くなって申し訳ありません。


回答が付いていたんですが検証が遅くなってしまって・・・。
とりあえず参考用スクリプトを以下に記述いたします。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>TEST</title>
</head>
<SCRIPT Language="JavaScript">
<!--
var FrameContent_TEST;
var sFramePageURL = 'http://web.vago.jp/test_1962/ok_wave/20090610/Fr …
var sWinName = 'TestPage';
function fShowFramePage(){
FrameContent_TEST = window.open(sFramePageURL,sWinName,'width=800,height=700,scrollbars=1');
FrameContent_TEST.focus();
CheckFrame(FrameContent_TEST);
}
function CheckFrame(w){
if(typeof(w.main) != 'undefined'){
// alert(typeof(w.main)+"を確認しました");
document.f1.target = "main";
document.f1.action = "http://web.vago.jp/test_1962/ok_wave/20090610/te …
document.f1.submit();
}else setTimeout(function(){CheckFrame(w)}, 1000);
}


//-->
</SCRIPT>
<body>
<form method="POST" name="f1">
<input type="hidden" name="TEST_TEXT01" value="試験">
</form>

<br>
試験フレームのみ【ページ開く】<input type="button" value="新しい窓を開いてFrame確認" name="B1" onClick="fShowFramePage();"><br>
試験フレームのみ【フレームチェック】<input type="button" value="新しい窓のFrame確認" name="B2" onClick="CheckFrame(FrameContent_TEST);"><br>
<br><br>
</body>
</html>

参考URL:http://hiroba.kodate.jp/qa5037537.html
    • good
    • 0

JavaScriptでPOSTしなおす手法を各種ブラウザでいろいろと検証してみました。


ブラウザでできないものとできるものとに分かれました。
可能なもの
 IE 8
 Netscape 7.1
 FireFox 3.0.10
 Opera 9.63
IEとネスケはほとんど問題ありませんが後者2種はwindow.openのあと、フレームオブジェクト生成に微妙なズレが発生します。
window.openの後に「 while(typeof(WinDetail.main01) != 'undefined'); 」等と入れてオブジェクト生成まで待ったをかけてやると正常に動いてくれます。
ただ、この例みたいにwhileだけだとオブジェクト生成に万一失敗した場合、永久ループに入ってしまいますのでtimeoutでbreakしてやるプログラムを組み込んでやると良いでしょう。

反対に不可能なもの
 Safari 3.1.1
 GoogleChrome 2.0.172.31
上記の2ブラウザはwindow.open直後はいっこうにフレーム名オブジェクトが定義されず(バグ?)、この手法での解決に至っておりません。

とりあえず、JavaScriptのコーナーで回避策を問い合わせておりますが解答が付くものかどうか。
    • good
    • 0

IE8とNetscape7はOKでしたが


Chrome,Opera,Safari,Firefoxには別窓フレーム名扱いにバグ(あるいは故意)があるみたいでNGでした。
かくなる手段として
今までのように相手側を変更しないのなら呼び出す側にフレーム表示するCGIを作って置くか、相手側変更可能でも工数的には変わらない相手側index.htmlを前者と同様のCGIに変えてフレーム表示させるかしかないと思います。
イメージとしてこんな感じ(プロポーショナルフォントだとずれるかも)
   自由に利用できるサイト側にフレームを表示するCGI を置く    
      送信データからOnLoadで自動送信するHTMLを        
      サーバに吐き出して( 仮にABC.HTML) からこ        
      フレームを表示する機能を持つこととする         
 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ 
 ┃http://hogehoge.com/kensaku/index.html           ┃ 
 ┃で呼ばれるheaderのURL                    ┃ 
 ┠─────┬────────────────────────┨ 
 ┃http://hog│                        ┃ 
 ┃ehoge.com/│                        ┃ 
 ┃kensaku/in│  事前に動的に吐き出したABC.HTMLを指定して  ┃ 
 ┃dex.html │  http://hogehoge.com/kensaku/kensaku.cgi   ┃ 
 ┃で呼ばれる│  にデータを自動送信し間接的に表示させる   ┃ 
 ┃sideのURL │                        ┃ 
 ┃     │                        ┃ 
 ┗━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━┛ 

参考になりますでしょうか?
    • good
    • 0
この回答へのお礼

たびたびの回答、ありがとうございます。

JavaScriptの方法をこちらでも試してみましたが、
Chromeなどではウントモスントモ言いませんでしたね。。。

ブラウザが多くて困ります・・・。(^^;


さて、今回の回答ですと可能な感じがしますが、
具体的に見えてきません・・・。(XX)

複雑な処理が必要ということはわかりますが・・・

どうしたものか・・・

お礼日時:2009/06/10 17:56

多重投稿、すいません。


IE以外のブラウザだとうまくいかないようです。
今しばらくお待ちを。
    • good
    • 0

詳細な説明のおかげで多分わかりました。


呼ばれる側に手を加えられないという条件でなら、JavaScriptを使うという条件つきで可能です。
FORMタグのnameを「f」とした場合(もちろんメソッドはPOST)

function callWin(){
// サイズ横800縦700の空の窓を「NewWin」という名前で開きます。
var WinDetail = window.open("http://hogehoge.com/kensaku/index.html","NewWin" …
WinDetail.focus();
document.f.action = "http://hogehoge.com/kensaku/kensaku.cgi";
document.f.target = "main";
document.f.submit();
}

のように

事前に対象ページをJavaScriptで開き
対象のフレーム名をターゲットにsubmitする
関数を呼び出す

のが手っ取り早いかも。

条件など微妙に異なる様でしたらごめんなさい。
    • good
    • 0

> 別サイトの特定のフレームへPOSTすることは可能でしょうか?


可能か、不可能か、という以前に「フレームへPOSTする」という構文が成立しません。

ご質問の意を推測すると、
(1) Aサイトのindex.htmlは、header, side, mainの3フレームを構成し、mainフレームは kensaku.cgiでPOSTされたキーワードで検索した結果を表示するようになっている。
(2) Bサイトのページにある Aサイトの検索ホームからキーワードをPOSTすると検索結果だけが表示されるが、そうではなく(1)のフレーム構成でmainフレームに検索結果を表示することは可能か。
ということではないかと思います。

そうだとすれば、やり方はいろいろあります。
たとえば、BサイトからのPOSTに対してindex.htmlに相当するフレーム構成データを返すようにして、このときmainフレームのsrc属性値をkensaku.cgi?keyword=%E3%83%AF%E3%83%BC%E3%83%89 としてやるとか、、、

この回答への補足

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

フレームページにPOSTしたら、
指定したフレームに値を引き継いでくれないかと思ったのですが、
ダメそうですね~。

ご推測の内容は、その通りです!
わかりやすくしていただいて、ありがとうございます。

「いろいろある」というやり方は、Aサイトの3つのフレームページを子フレームとした、
新しいページを作成するという方法ですね?

kensaku.cgiへ、URLパラメータで渡すことはできないと思うので、
同じ問題にぶちあたりそうです・・・。

認識が違うかな?

補足日時:2009/06/10 12:53
    • good
    • 0

質問に対する質問でたいへん申し訳ありません(ご立腹されるかもしれませんが下記の文がどうしてもわかりません)。


> 子フレームで表示して欲しいページがブラウザ上に直接表示されてしまいます
・mainというフレームに結果表示が欲しいのにページ全体が書き換わってしまうということでしょうか?
・または、ページにある3つのフレーム(header, side, main)に4つ目を確保してそこに結果表示させたいのでしょうか?
・それとも新しいブラウザを別窓で開いてそこに結果表示させたいのでしょうか。
「親」とか「子」は状況によって立場が変化しますのでフレーム名で説明していただけたほうがわかりやすいと思います。
また、CGIを呼ぶ側のフレーム名とその手法(<form>タグ/JavaScript/その他)も添えていただきますと解決の糸口になるかと思います。

この回答への補足

たびたびのご回答ありがとうございます。
回答いただいてるのに立腹なんてとんでもありません。(^^

説明が不足してる点が良くわかりました。

やりたいことを詳細に書きますね。
■呼ぶ側にはINPUTタグがあり、入力した値をPOSTします。
■SUBMITすると別ウィンドウで、あるサイトを開きます。
■あるサイトとは、フレーム構成になっており、3つの子フレームがあります。(header, side, main)
■mainフレームでkensaku.cgiというページを開き、POSTした値を受け取りたいのです。

前提条件として、
■呼び出すサイトを修正することは極力さける。(そうしないと不可能であれば可)

こんな感じです。

たびたびの補足で申し訳ありませんが、よろしくお願いします。

補足日時:2009/06/10 12:32
    • good
    • 0

文章中以下の1文のせいで、質問の意図が汲み取れないのですが


> ■結果:値は受け取れたが、子フレームが直接表示される。
これは、「POSTできている」ということは「可能」という質問に対する結果が出ているというようにとれるのですが、
また、「子フレームが直接表示される」でそうなって欲しくない別の結果を望んでいてそうするにはどうすればよいの
かというタイトルと異なる別の質問を提起しているようにも思えます。

大きく勘違いしているのが、クライアントサイドとサーバサイドの区別がごっちゃになっている点なので整理しましょう
・フレームはクライアントサイドにおけるブラウザの表示形態です
・POSTはサーバに送信されるデータの手段形式です
ここでわかるように「フレーム」と「POST」は送信データにおける(取り扱う人間の)主観的関連性は有りますが、技術的機能的に関連しているものでは有りません。

質問の意図は
「特定のCGIにPOSTしたデータから処理の結果」を「特定のフレームに対して表示したい」
ということでしょうか?
ただそれなら「<やったこと2>」で実現できていると思うのですが・・・。

最終的にどうなって欲しいのかをもう少し具体的にお願いいたします。

この回答への補足

早速の回答ありがとうございます!

説明を補足しますね。

<やったこと2>で、POSTした値は受け取れましたが、
子フレームで表示して欲しいページがブラウザ上に直接表示されてしまいます。

やりたいことは、子フレームとして表示したいんです。

元ページ→親フレーム→子フレーム

と言った形で値が渡せればと思うんですが・・・。

よろしくお願いします!

補足日時:2009/06/10 10:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報