HTMLから、小窓を開いて画像を表示させるプログラムを書いています。
小窓には、画像保存ボタンとCLOSEボタンがあります。
CLOSEボタンを押すと、画像の情報がディレクトリから消されるような仕組み(CGI)になっています。
ただ、困ったことに、ブラウザの右上のバツ印で小窓を消されるとそのCGIが起動しません。
バツ印をつかえなくするか、何か画面を閉じた瞬間にCGIを動かせるような方法はないでしょうか。
ちなみに,現段階のプログラムはこのようなかんじです。
<script language="JavaScript">
<!--
function exit(){
window.open("http://etwas/cgi/test.cgi");
alert("test");
}
<!---->
</script>
</head>
<body onUnload="exit()">
こうすることで,閉じた瞬間に新しい画面が開いてくれるのではないか、と思ったのですが
うまく行きませんでした。アラートはでるのですが。
ちなみに遷移先のCGIは開いた瞬間にプログラムを実行して閉じるようにしてあります。
よろしくお願いします。
No.2
- 回答日時:
それって、単にブラウザのポップアップブロックが有効になっている訳じゃないでしょうかね…。
試すと普通に動きますが、端末依存でもないですか?
後、<!---->じゃなくて//-->であるとか、httpの前のブランクを削除するとか、バグになるところは念のため排除しておいた方がいいですよ。今回は関係なさそうですが。
この回答への補足
ご指摘ありがとうございます。
さっそく修正しました。ちなみに、今まではFIREFOXでみてたのですがIEだと、
小窓が開きました。ただ思ったような動作はしてくれませんでしたが。
CGIが動かないのです。
呼び出し先のCGIはこのような感じです。
use HTML::Template;
use strict;
use CGI;
my $q = new CGI;
my $ckn = $q-param('ck');
system "cd /DS/tmp;rm /DS/tmp/\"$ENV{'REMOTE_HOST'}$ckn\".gnuplot.*";
my $template = HTML::Template->new(filename => 'loeschen.tmpl');
print "Content-Type: text/html\n\n", $template->output;
そして、tmplはこうです。
<html>
<head>
<META http-equiv="Content-Type" content="text/html;">
<SCRIPT language="javaScript">
<!--
window.self.close()
//-->
</script>
</head>
<body>
</body>
</html>
そして、CLOSEボタンをおすと 、onUnloadにもひっかかって、二回もCGIを呼び出してるみたいです.
No.3
- 回答日時:
>my $ckn = $q-param('ck');
>が抜けてますが、大丈夫ですよね?
my $ckn = $q->param('ck');
$ENV{'REMOTE_HOST'}は取得できない場合が多いですが、大丈夫でしょうか。
systemで叩いているコマンドを一度表示して見てはいかがでしょうか。
この回答への補足
ご指摘ありがとうございます。
実は、横にLINUXパソコンをおいて,見ながらタイプしてたので、うちま違えです。
そして、環境変数は大丈夫なようです。
普通に使うと使用できたので。
もう、あきらめてクローズボタンで閉じるように使う人にいうのが楽かもしれません。
No.4ベストアンサー
- 回答日時:
小窓を開くことは必須条件なのでしょうか?
CGIだけ実行して結果を棄て、まどをそのまま閉じるのならAjaxを使えば良いと思います。
プログラム例:
<script language="javascript">
<!--
// -------------------------------------
// -------------------------------------
function exit(){
var xObj = createHTTPRequest();
var fName = "http://etwas/cgi/test.cgi";
var sVoid = '';
xObj.onreadystatechange = function(){
if (xObj.readyState == 4) {
if (xObj.status == 200) { sVoid = xObj.responseText;
} else { sVoid = "通信に失敗"; }
} else { sVoid = "通信中"; }
}
xObj.open("GET", fName, true);
xObj.send(null);
}
// -------------------------------------
function createHTTPRequest(){
if(window.ActiveXObject && !window.XMLHttpRequest){
try{
return (new ActiveXObject('Msxml2.XMLHTTP'));
}catch (e) {}
try{
retrurn (new ActiveXObject('Microsoft.XMLHTTP'));
}catch (e) {}
return (null);
}else if(window.XMLHttpRequest){
return (new XMLHttpRequest);
}else{
return null;
}
}
//-->
</script>
CGIの方もJavaScriptでCloseとかしなくても、小窓自体開かずにCGIが実行されますので普通に書き直せると思いますがどうでしょうか?
もしも、小窓を開くことが必須ならお邪魔いたしました。
この回答への補足
ありがとうございます.
AJAXというものは、使ったことなかったのですが。コピーしてつかってみるとうまく行きました。
だた、ひとつ質問がありまして。
画面を2,3複数表示させて画面をとじていくときに少しおかしなことがおこります。
というのは、最後に表示した画面しかディレクトリから消されないのです。
CGIをよぶ時に
var fName ="http://etwas/cgi/test.cgi?ck=<TMPL_VAR NAME=CK>";とし、値もわたしています。
そして、そのCGIで、
system "cd /DS/tmp;rm /DS/tmp/\"$ENV{'REMOTE_HOST'}\".gnuplot.*";
として、ディレクトリのデータを消しています。
これは基本的にうまく動作しています。
もしかすると、最後のページ意外はEXIT関数にうまく飛んでないのではとおもい、
xObj.send(null);
alert("a");
}
EXITの最後に、alert("a");をいれるときちんとALERTは表示され、しか
も、ディレクトリのデータも消されていました。
ALERTがあればうまくいくのですが,すこし邪魔です。なにか思いつく点はありませんでしょうか。
よろしくおねがいします 。
No.5
- 回答日時:
> 画面を2,3複数表示させて画面をとじていくときに少しおかしなことがおこります。
> というのは、最後に表示した画面しかディレクトリから消されないのです。
JavaScriptの場合、処理が終了しきらないうちに、別の窓に制御を移した場合はどういうわけか処理そのものがなくなったりします。
Ajax(非同期通信)をSjax(同期通信)に変えても、タイマーでタイミングをとっても、故意にフォーカスを別の窓に移されるとおしまいです。
例えアラートを出しても、タイミングが合わなければ無理のようです。
検索をしてみると国内外問わず同じ悩みがある方がいらっしゃるようで、onBeforeUnloadなども試してみましたがダメでした。
もしかしたらどなたか達人が解決策を回答してくれるかもしれませんのでJavaScriptのカテで問い合わせてみてはいかがでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) PC利用中に勝手に起動する窓を消し去る方法を教えて下さい。 1 2023/05/08 16:48
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- ホームページ作成・プログラミング CGIが実行可能なHP領域又はレンタルサーバーでおすすめの所を教えてください 現在ホームページ領域の 1 2023/01/01 11:47
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- Perl perlのflock関数でロックをかけたままopen関数で何度もファイルを開きなおすことはできますか 3 2023/05/01 22:25
- CGI (フリーの)ツリー掲示版CGI、昔は多用させてもらいましたが・・今セキュリティ上どうでしょう? 2 2023/06/25 07:18
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ホームページでCGIのフォームを...
-
エクセルで集計したい。
-
number 改行が追加できない
-
古ーくからフリーのtree.cgi掲...
-
CGIで出力するhtmlの<!DOCTYPE ...
-
ラズパイでのCGIで、pythonソー...
-
CGIが読み書きするデータファイ...
-
フォームを再送信しますか?
-
apacheでPerl CGIが作動せず、5...
-
ホームページの事でおしえてく...
-
(フリーの)ツリー掲示版CGI、...
-
cgiからsendmailを送信で文字化け
-
CGI.pmはもう古い!?
-
CGIの記述について教えてくださ...
-
ホームページにCGIを設置したの...
-
cgi
-
マイクラpeで新しいアップデー...
-
CGI:HTML表示結果のカスタマイ...
-
POSTメソッドの最大容量について
-
生成AI画像について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CGIって何ですか?簡潔に教えて...
-
Perlプログラム上でアラートを表示
-
Webからアクセスし、画面のボタ...
-
IISでエラー、Apachでは動くの...
-
実行可能な外部コマンドは?
-
IIS5.1でCGI Timeoutになる原因...
-
ホームページにCGIを設置したの...
-
CGIファイルへのブラウザからの...
-
CGI経由で起動したプロセスが停...
-
毎日同時刻に、設定しておいた...
-
前回はごめんなさい。pythonでc...
-
cgi を定期的に自動実行
-
CGIからのプログラム起動
-
cgiで呼び出したプログラムを数...
-
ログアウト処理でWebブラウザを...
-
EXCELファイルに誰がアクセスし...
-
《エクセルVBA》「他の人が該当...
-
SFTPなどは使わないホームペー...
-
VBAでサーバーにアクセスするに...
-
URLに~/cgi-bin/~を隠す方法
おすすめ情報