【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

ある作品集の作品リストページで、作品の画像をクリックすると子画面が出るようにjavascriptで設定したのですが、子画面で「この作品について書き込む」というボタンをクリックするとフォームのCGIにデータを受け渡して書き込みができるようにしようとして困っています。

実は、親画面であるリストページにも「書き込む」ボタンがあるので、子画面で「書き込む」ボタンを押して子画面内でCGIに飛んでしまうと、サイト内を回り回って再度何か書き込みをする場合はその度に小画面の子画面が開くのでウインドウが増えてしまうことになるのです。

これを避けるために、子画面で「書き込む」ボタンをクリックすると親ウインドウの内容がCGIに飛んで、同時に小画面が閉じるようにしたいのですが、できないでしょうか?

現在、その小画面でのソースは、ヘッダに

<script language="JavaScript">
<!--
function openWi12(shiryou,botan,w,h) {
window.open(shiryou,botan,"width="+w+",height="+h+",left=10,top=10,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,favorites=no,resizable=yes");
}
// End -->
</script>

と入れて、ボタン部分が

<A HREF="cgi-bin/kakikomi.cgi" TARGET="_blank"><IMG SRC="sakuhin_new120.jpg"
ALT="" height="120" width="120" border="0" hspace="7" vspace="7" naturalsizeflag="0" align="BOTTOM" onClick='openWi12("cgi-bin/kakikomi.cgi","Request",740,450);return false'></a>

となっています。
ここに何かを書き足すことで実現できるようでしたらお教え頂きたく、どうかよろしくお願いします。

A 回答 (2件)

書き足すのではなく、書き換えるのが正解ではないかと思います。



子画面のAリンクは廃止して、JavaScriptの関数を呼び出しだけで対応するよう修正してください。
おそらくAリンクは、JavaScript非対応ユーザー対策と思うのですが、非対応のユーザーでは、そもそもの子画面自体が開きませんよね?
(あと、IMGエレメントのonClickイベントは、IE独自仕様だった気がするのですが・・・)

そして親画面側に、子画面を閉じて自画面の「書き込む」ボタンが押された場合と同等の処理をする関数を用意します。
子画面側では、window.opener.親画面の関数名() で呼び出しが出来ます。



これで一応問題は解決しますが、親画面子画面でさらに共通化を図るなら・・・

function windoeSubmit(winObj,trgUrl){
if(winObj) winObj.close();
openWi12(trgUrl,",740,450);
}

として、
子画面側では、window.opener.windoeSubmit(window,'cgi-bin/kakikomi.cgi');

親画面側では、windoeSubmit(false,'cgi-bin/kakikomi.cgi');

と記述すれば、同じ関数で処理が賄えます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
うわぁ、結構大変なことになるんですね。
実は現在のソースは、サンプルをフリー配布して下さっているサイトから頂いてきて付けただけなので、別のものに置き換える能力は私には無いのです。
それで、「そんな目的なら、このサイトにこんなサンプルがあるので、付け足したら?」という感じで教えて下さる方がいらっしゃるのではないかと質問させて頂いたのですが、結構専門知識が要りそうですね。
これを機会にちょっと勉強してみようかなと思います。
ヒントをどうもありがとうございました。

お礼日時:2006/04/22 23:47

久しく、gooのメアド自体アクセスしていませんでした。

(汗
・・・「教えて」の回答以外にはgooは全く利用していないので・・・(^^;

さて。
JavaScriptは間借りなりにも「プログラム言語」ですので、画像などとは違ってフリーのサンプルを借用して使用した場合にはスクリプト間の相互影響など出てしまいます。
ですので「フリーのサンプル」は「手法のサンプル」と割り切って、きっちりご自分でスクリプトを作成された方が宜しいかと思います。
回答履歴を閲覧させて頂きましたが、相当にコンピュータ関連の知識は豊富な方のようですね。
たぶん、ちょっとコツを掴めば、余裕でバリバリのJavaScript遣い成れそうですね。

CGIとJavaScriptで仕事分けをする場合、JavaScript側は「サーバに余計な仕事をさせない為」と位置付けると宜しいかと思います。
感想をCGIで登録する場合、FORMエレメントに onsubmitハンドラを儲けておいて、記述内容のプレチェックを行うようにすれば、本文が無い場合などのケアレスミスチェックなどで、サーバに余計な負荷を掛けずに済みます。
(ただし・・・ユーザエージェントへ仕掛けをして改変など可能なので、CGI側のチェック自体は外せませんが・・・)


なお・・・
あたしの目から見るとサンプルにされた元の配布スクリプトは、相当に室の良くないものだったように見受けられますねぇ。
イタイのは「",left=10,top=10,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,favorites=no,resizable=yes"」この部分。

こんな長々としたパラメータを記述するなら、
<SCRIPT>
var wOprm = 'width=740,height=450,left=10,top=10,toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,favorites=no,resizable=yes";
</SCRIPT>
とだけ記述しておけば、openWi12() は全く不要で 親画面側は
onClick='window.open("cgi-bin/kakikomi.cgi","Request",wOprm);return false'
これだけで充分になってしまいます。

子画面側はJavaScriptを廃止して、
<A HREF="cgi-bin/kakikomi.cgi" TARGET="_self">
で、実は子画面問題は解決かと。
    • good
    • 0

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


おすすめ情報