
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.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のカテで問い合わせてみてはいかがでしょうか。
No.3
- 回答日時:
>my $ckn = $q-param('ck');
>が抜けてますが、大丈夫ですよね?
my $ckn = $q->param('ck');
$ENV{'REMOTE_HOST'}は取得できない場合が多いですが、大丈夫でしょうか。
systemで叩いているコマンドを一度表示して見てはいかがでしょうか。
この回答への補足
ご指摘ありがとうございます。
実は、横にLINUXパソコンをおいて,見ながらタイプしてたので、うちま違えです。
そして、環境変数は大丈夫なようです。
普通に使うと使用できたので。
もう、あきらめてクローズボタンで閉じるように使う人にいうのが楽かもしれません。
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を呼び出してるみたいです.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IISでエラー、Apachでは動くの...
-
EXCELファイルに誰がアクセスし...
-
FTPにて553エラー
-
MT/カスタムフィールドでのPDF...
-
VBAでサーバーにアクセスするに...
-
httpd の1.42pで表示出来ないCG...
-
CGIでソースがそのままでてしま...
-
.cgi拡張子のままCGIファイルを...
-
動的URLから静的URLへのリダイ...
-
IISのSSIの設定について
-
ファイルダウンロード後に、デ...
-
サーバー間でファイルコピーしたい
-
表示画面が真っ白になる場合、...
-
ユーザの所属するグループを取...
-
ApacheでのCGIについての質問
-
HTML文書の中で環境変数を使う...
-
FFFTPでアップロードできない?
-
WIn32API ディレクトリ内ファイ...
-
通貨表示で3桁毎にカンマ(?)を...
-
KENT WEB(昨日の続きです)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
cgi を定期的に自動実行
-
csvエディター
-
CGIのちょっとしたこと
-
Webからアクセスし、画面のボタ...
-
Perlプログラム上でアラートを表示
-
iアプリのダウンロード回数のカ...
-
PHPとcgiの違い
-
C言語のCGIはプロパイダに聞か...
-
cgiで呼び出したプログラムを数...
-
実行可能な外部コマンドは?
-
PerlとCで相互に通信をさせたい
-
ホームページにCGIを設置したの...
-
http://www.***.com/***/***.cg...
-
おかしなif文だと思うのですが...
-
インターネット通信
-
CGIって何ですか?簡潔に教えて...
-
reuire 先に引数が渡ってしまう
-
perlによる外部プログラムの実行
-
IISでエラー、Apachでは動くの...
-
EXCELファイルに誰がアクセスし...
おすすめ情報