-PR-
締切済み

掲示板に書き込まれたログを別ウィンドウに

  • 困ってます
  • 質問No.89524
  • 閲覧数39
  • ありがとう数5
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 88% (46/52)

掲示板のフリーCGIを少しだけ改造したいと思っています。ログが初めて表示されたときではなく、ログに変更があったとき(=書き込みがあったとき)に、別ウィンドウをオープンし、ログの内容によってWindowsに表示する内容を変えたいのですが、そんなことってできますか?
昇進機能付きの掲示板で、本当は昇進したときのみ別ウィンドウで画像を表示させたいのですが。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全2件)

  • 回答No.1

 CGIから別ウィンドウを開くときは、CGI上でJavaScriptを構築してそれを出力するHTMLの中に含めます。
 複数の言語(PerlとJavaScript)を混ぜてプログラムすることになるので、少々大き目の改装になると思います。

 まず、出力するHTMLを構築している部分を探してきてそこにサブウィンドウを表示させるJavaScriptを加えます。
 このとき、サブウィンドウのURLは自分自身にしておき、引数のフラグによって「サブウィンドウモード」で動作するようにしておきます。
 あとは、サブウィンドウモード時はサブウィンドウを表示するためのルーチンが働くように Perl を改装します。
お礼コメント
nonchi

お礼率 88% (46/52)

さっそくの回答ありがとうございます。
JavaScriptのwindow.open()を使うことは考え付いて、質問する前にやったのが、HTMLの<head>の中に
print "<SCRIPT>\n";
print "function openwindow(){\n";
print " openwin=window.open(\"\",\"\",\"width=600,height=550,toolbar=0,status=0,menubar=0\")\n";
print " openwin.document.write(\"<CENTER><img src='./map/$map' width='600' height='500'>\")\n";
print "}\n";
print "</SCRIPT>\n";
と入れ、$mapにファイル名が入っているかどうかで、2通りの<body>行を作って、ファイル名が入っていればonLoad=openwindow()としてみたのですが、$mapにファイル名が入ることなく失敗でした。

もちろんボタンを押してonClickによってwindowsを開くことはできたのですが、onLoad以外の方法で具体的にどのようにしてwindowsを開けばいいのでしょうか?

CGIもJavaScriptも、というか本格的なプログラミング経験のない人間がするには、あまりにも無謀過ぎるかも知れませんが、勉強したい気持ちはありますので、どうかよろしくお願いします。
投稿日時 - 2001-06-13 13:40:44


  • 回答No.2
レベル9

ベストアンサー率 47% (27/57)

大体の状況は他の方がお応えになっているので、、

補足にあった文章で気になった事があったので書いています。

>と入れ、$mapにファイル名が入っているかどうかで、2通りの<body>行を作って、ファイル名が入っていれば
>onLoad=openwindow()としてみたのですが、$mapにファイル名が入ることなく失敗でした。

とあるのですが $mapにファイル名が入ることなく、とありますが、
このHTMLを吐き出す前に判定とかしていますか?

もしこの$mapファイルがあるならば、問題ない訳ですよね?
なければ、違う画面を出したいのであれば、このHTMLを書き出す前に $map があるかないかを判定して処理を分けるというのが普通な気がするのですが。

ちょっと的外れかもしれませんが、気になったので一応。。。
ヒントになれば幸いです。
補足コメント
nonchi

お礼率 88% (46/52)

deagleさんの回答を見て、いろいろやってみたのですが、現在のスクリプトはこうです。
if ( $FORM{'action'} eq "regist" ) { #書き込みがあったら
&regist ; #新規
} else {
&update ; #変更
}
&view ; #ログ表示
&footer ;

流れの大まかなところは上記のようになっているので、「regist」「update」の中で、それぞれ判断の材料としたい値を変数に入れました。
sub regist {
foreach $buf ( @SVLOG ) {
($oyano,$name, ..... $syo,$d) = split(/,/,$buf);
$old_gif = $syo ; #以前の画像をあとで比べるため


unshift(@SVLOG,"$no,$FORM{'name'}, ..... $syoshin,\n");
$new_gif = $syoshin ; #書き込み後の昇進画像


}

次にHTMLのヘッダ部分ではなく、「view」の中にJavaScriptを移してみました。
sub view {
if(($new_gif == "" && $new_gif != $old_gif) || $old_gif == "" && $new_gif != "") {
$map = "./map/" . "$new_gif" . ".gif" ;
print "<SCRIPT>\n";
print "function openwindow(){\n";
print " openwin=window.open(\"\",\"\",\"width=600,height=550,toolbar=0,status=0,menubar=0\")\n";
print " openwin.document.write(\"<CENTER><img src='$map' width='600' height='500'>\")\n";
print "}\n";
print "</SCRIPT>\n";
}
print "new『$new_gif』old『$old_gif』\n"; # Check用(実行したらどちらも空っぽ)


}

私の頭の中ではregistかupdateを通った後でviewにくるなら、viewの中での$new_gifには値が入ってきていると思ったのですが、表示させてみると空っぽなんです。
また、ヘッダ部分ではなくviewの中での処理にしたとき、どうやってこのJavaScriptを呼び出したらいいのでしょうか?
ちなみにJavaScriptをヘッダに書いていたときは、
if ($map) {
print "<body $set onload=\"openwindow()\">\n";

} else {
print "<body $set>\n";
}
という風にしていました。長々とすみません。よろしくお願いします。
投稿日時 - 2001-06-13 17:44:42
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ