以下にフォームと確認ページ(CGI)があります。確認ページを表示すると「window.opener.documentはnullまたはオブジェクトではありません」という表示がでます。どこが問題でしょうか
(フォーム)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>フォーム</title>
</head>
<body>
<form name="user" action="kakunin.cgi" method="post">
<p>メール
<input name="mail" type="text" value="" size="30">
<input type="submit"" value="確認">
<input type="reset"" value="リセット">
</form>
</td>
<td width="148"></td>
</tr>
</table>
</body>
</html>
ーーーー
確認ページ
#! /usr/bin/perl
print<<END;
Content-type: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><title>確認</title>
<script language="JavaScript1.1" type="text/javascript"><!--
var win;
function fun(){
win=window.opener.document.all.user.mail.value;
window.document.kuser.kmail.value=win;
window.opener.close();
}
//-->
</script>
</head>
<body onLoad="fun();">
<form name="kuser">
<input TYPE="text" NAME="kmail" value ="">
<p>
<input name="button" type="submit" value="送信">
</p></form>
</body>
</html>
END
No.2ベストアンサー
- 回答日時:
私もCGIの補助機能としてJavaScriptを少し使う程度でそんなに詳しくはないのですが、
質問に回答したいと思います。
>1)action="kakunin.cgi"があるのになぜonClickで再度kakunin.cgiを指定する必要
>があるのですか
”kakunin.cgi”の中のJavaScriptでopenerというのを使っていますが、このopenerは、
親ウィンドウのことを示しています。
質問者さんの方法だと、親ウィンドウがないため「window.opener.documentはnullまた
はオブジェクトではありません」という警告が出たのだと思います。
親ウィンドウはopenというメソッドによって子ウィンドウを生成することができます。
生成された子ウィンドウは、openerによって親ウィンドウを参照することができます。
したがって、openerを使うのであれば、下記のようにopenメソッドによって子ウィンド
ウを生成する必要があるという理由です。
onClick="window.open('kakunin.cgi');return false;"
>2)フォームをクリックすると、「ウインドウは表示中のwebページにより閉じられよ
>うとしています------」の表示がでます>が、これが表示しないようにするにはどう
>すればよいですか
下記のようにすれば、警告なしで閉じるようにはならないでしょうか?
<input type="submit" value="確認" onClick="window.opener='main';window.open('kakunin.cgi');return false;">
”kakunin.cgi”に関してですが、フォームは質問者さんが書いたままで(onClickを書
かない)、通常はJavaScriptは使わずに以下のよう書きます。
use CGI;
my $q = new CGI;
my $email = $q->param('mail');
print<<END;
Content-type: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><title>確認</title>
</head>
<body>
<form name="kuser" action="soushin.cgi" method="post">
<input TYPE="text" NAME="kmail" value =$email>
<p>
<input name="button" type="submit" value="送信">
</p></form>
</body>
</html>
END
JavaScriptは通常、内容確認で補助的に使ったりします。
例えば、質問者さんのフォームのHTMLでは以下のようにして、内容確認ダイアログを
出したりします。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>フォーム</title>
<script type="text/javascript">
<!--
function confirm_submit(message, form) {
if(confirm(message)) {
form.submit()
}
}
//-->
</script>
</head>
<body>
<form name="user" action="kakunin.cgi" onSubmit="confirm_submit('メールは「' + document.all.user.mail.value + '」でよろしいですか?', this);return false;" method="post">
<p>メール
<input name="mail" type="text" value="" size="30">
<input type="submit" value="確認">
<input type="reset"" value="リセット">
</form>
</td>
<td width="148"></td>
</tr>
</table>
</body>
</html>
No.4
- 回答日時:
JavaScriptソースの隠蔽のことを言っているのでしょうか?
残念ながら私はしたことがないのでわからないです。
「JavaScript 難読」や「JavaScript 圧縮」で検索するとお望みのものが引っ
かかるかもしれません。
JavaScriptの質問ページがあるのでそこで質問されてみるといいと思います。
No.3
- 回答日時:
No.2の回答での最後のJavaScriptによる内容確認ダイアログですが、簡潔に以下よう
にも書けますね。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>フォーム</title>
</head>
<body>
<form name="user" action="kakunin.cgi" onSubmit="return confirm('メールは「' + this.mail.value + '」でよろしいですか?')" method="post">
<p>メール
<input name="mail" type="text" value="" size="30">
<input type="submit" value="確認">
<input type="reset"" value="リセット">
</form>
</td>
<td width="148"></td>
</tr>
</table>
</body>
</html>
いろいろと教えていただき感謝しています。言われたことを1つづつ吟味しながら覚えていきます。
最後に質問ですが、このようなプログラムは、ソースを見れば他人に分かってしまうのですが、他人が分らない方法はないのですか。たまにソースを見ると文字化けのようなものもありますがこれはよい方法と思いますが、どのようにするのか分りません。よろしく
No.1
- 回答日時:
フォームの<input>を以下のように変えたら、所望の結果は得られないでしょうか?
<input type="submit"" value="確認">
↓ ↓ ↓
<input type="submit"" value="確認" onClick="window.open('kakunin.cgi');return false;">
ありがとうございました。表示できました。
ところで質問ですが
1)action="kakunin.cgi"があるのになぜonClickで再度kakunin.cgiを指定する必要があるのですか
2)フォームをクリックすると、「ウインドウは表示中のwebページにより閉じられようとしています------」の表示がでますが、これが表示しないようにするにはどうすればよいですか
よろしく
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP php ログイン 1 2022/11/01 00:24
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで集計したい。
-
めちゃきれい
-
apacheでPerl CGIが作動せず、5...
-
(フリーの)ツリー掲示版CGI、...
-
ラズパイでのCGIで、pythonソー...
-
CGI.pmはもう古い!?
-
.htaccessについて
-
POSTメソッドの最大容量について
-
3DCG
-
/bin/awk '{print $5}'ってどう...
-
入力フォーム(電話番号)
-
誕生日占いをプログラムで作成...
-
number 改行が追加できない
-
生成AI画像について
-
ホームページにメールフォーム...
-
cgi アクセス制限 エラー
-
CGIの記述について教えてくださ...
-
CGIの設置が分かりません・・・
-
ホームページにCGIを設置したの...
-
ホームページにCGIを設置したの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
open.window(javascript) を使...
-
さくらインターネットのCGI...
-
Rubyのmechanizeを利用したファ...
-
htmlからcgiに変数を配列にして...
-
フォーム入力後の確認画面表示...
-
HTMLタグが使えるCGIスクリプト
-
(Perl)ReadParseによるハッシ...
-
別サーバーのcgiへバイナリデー...
-
perlで自動ログインをしたいが...
-
VBで表示したホームページの...
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
select値をhiddenのvalueに渡し...
-
「value」に2つの値をセットす...
-
チェックボックスの返す値
-
INPUT TYPE
-
WEBページを強制的に横画面で見...
-
[HTML]プルダウンメニューの横...
-
VB.net データーグリッドビュー...
-
別formのhidden項目を自form値...
おすすめ情報