【最大10000ポイント】当たる!!質問投稿キャンペーン!

window.openしたウィンドウのonloadに
 window.onblur = function() { window.close(); }
を設定しているのですがFirefox3.6、Opera10.51ではウィンドウからフォーカスが外れたらウィンドウが閉じるのですが(期待している動き通り)、
IE6のみwindow.openしたウィンドウをクリックしたと同時にウィンドウが閉じてしまいます。
どうすればIEでもFirefox,Operaと同じ動きをさせることが出来ますでしょうか・・・

A 回答 (1件)

こちらの環境では再現しません。

(IE6.0.29)

新規ウィンドウの中でもアドレスバーなどをクリックすると、blurが発生するようでcloseしますが、これはFFでもOperaでも同様でした。
    • good
    • 0
この回答へのお礼

検証していただきありがとうございます。
どうも、個体の問題のような気もしてきました・・・
他のPCでも試してみるようにいたします。

お礼日時:2010/04/06 22:21

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

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

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

Qwindow.Openをモーダルにできますか?

こんにちは。

表題のように、Window.Openをモーダルにしたいのです。

親フォームからサブフォームを開き、
そこでクリックで選択された値を親フォームに展開させる
という処理をしたいのです。

ShowModalDialogだと、そのサブフォームで入力された値を親フォームに表示することができないのではないか・・・と思っています。

どなたかいい方法をご存知の方、
どうか教えてください。
よろしくお願いします。

Aベストアンサー

> ShowModalDialogだと、そのサブフォームで入力された値を親フォームに表示することができないのではないか

IE依存でかまわない、ということですね。

showModalDialog() は、表示したダイアログから、戻り値を返すことができます。

ダイアログの方では、window.returnValue という window オブジェクトの
プロパティがあるので、これに値を設定します。

親の方では、

ret = showModalDialog(…);

として、その値を受け取ります。

複数の数値のやり取りがあるのであれば、その window.returnValue に設定
するものを Object や Array にすれば良いですね。


因みに表題の

> Window.Openをモーダルにしたい

はやめておいた方が良いです。

あるウィンドウを常に一番上に表示することは可能ですが、そのウィンドウが
複数あると破綻します。

モーダルなウィンドウが、動作として必要なのであれば、新しくウィンドウを
開くのではなく、切り替えるようにインターフェースを考え直すべきだと
思います。

# もしくは applet を作るか

> ShowModalDialogだと、そのサブフォームで入力された値を親フォームに表示することができないのではないか

IE依存でかまわない、ということですね。

showModalDialog() は、表示したダイアログから、戻り値を返すことができます。

ダイアログの方では、window.returnValue という window オブジェクトの
プロパティがあるので、これに値を設定します。

親の方では、

ret = showModalDialog(…);

として、その値を受け取ります。

複数の数値のやり取りがあるのであれば、その window.return...続きを読む

Qbodyタグのfocus

jqueryで

$('body').focus(function() {
alert('focus');
});

などと記述しても、フォーカス時にうまくアラートが表示されません。
Bodyタグにonfocusとして直接書くと動作するのですが、何か違いがあるのでしょうか?

よろしくお願いします。

Aベストアンサー

http://dev.w3.org/html5/spec/sections.html#the-body-element
HTML5の方を読むと、
『window.onfocusはHTMLタグとして書けないから、<body onfocus="">で書いてちょ。ブラウザはwindowに置き換えてちょ。』
ということのようですね。

HTMLとJavaScriptの関係では、document.body.onfocusは<body onfocus="">と同等なのでwindowにマッピングされるのかもしれませんが、
addEventListenerによるイベントリスナーの登録は別物なので、
文字通り<body>にフォーカスが当たらなければonfocusイベントが呼び出されないと思います。


jQueryは全面的にaddEventListener/attachEventを使っていると思いますので、
jQueryを使うと、結果的にbodyに登録されたイベントリスナーが呼び出されなくなると思います。


デフォルトでフォーカスが当たる要素は下のページにあるように<a>や<input>などです。
<body>にフォーカスを当てる方法としてNo.3とおりtabindexが使えるようです。
http://dev.w3.org/html5/spec/editing.html#specially-focusable
>An element is specially focusable if the tabindex attribute's definition above defines the element to be focusable.

http://dev.w3.org/html5/spec/sections.html#the-body-element
HTML5の方を読むと、
『window.onfocusはHTMLタグとして書けないから、<body onfocus="">で書いてちょ。ブラウザはwindowに置き換えてちょ。』
ということのようですね。

HTMLとJavaScriptの関係では、document.body.onfocusは<body onfocus="">と同等なのでwindowにマッピングされるのかもしれませんが、
addEventListenerによるイベントリスナーの登録は別物なので、
文字通り<body>にフォーカスが当たらなければonfocusイベントが呼び出されない...続きを読む

QHTMLフォームのSELECTの幅を一定にするためには?

HTMLフォームのSELECTの幅を一定にするためにはどのようにすれば
いいのでしょうか?

CSS等で設定できるとありがたいのですが、やり方がわかりません。

Aベストアンサー

<select style="width: 200px">

Qモーダルダイアログウィンドウの改修方法

現在メンテナンスを担当しているWebアプリが
モーダルダイアログウィンドウ(showModalDialog)を多用しています。

このシステムは画面は jsp と javascript で、後ろはJavaです。


特に、伝票の入力処理では各行の商品IDを入力するときにモーダルダイアログウィンドウ
が開いて商品一覧が表示され、その中から商品を選択すると親画面に戻って商品情報が
表示される、という仕組みになっています。

親画面自体は開かれたままなので、画面遷移の考慮をしないで済む、という点では
シンプルなプログラムになっています。

ところがこの「showModalDialog()」、ブラウザによって若干挙動が異なったり、
将来廃止されるらしい、とのことで改造を迫られています。

モーダルダイアログウィンドウを使わない設計がいいとは思うんですが、
どのような仕組みに変えた方がよいでしょうか。

例えば画面遷移で商品を選択して戻るような仕組みにすると、途中まで入力した伝票情報を
すべて保持したまま遷移しなければなりません。

どのような仕組みがよいかご意見をお願いします。

現在メンテナンスを担当しているWebアプリが
モーダルダイアログウィンドウ(showModalDialog)を多用しています。

このシステムは画面は jsp と javascript で、後ろはJavaです。


特に、伝票の入力処理では各行の商品IDを入力するときにモーダルダイアログウィンドウ
が開いて商品一覧が表示され、その中から商品を選択すると親画面に戻って商品情報が
表示される、という仕組みになっています。

親画面自体は開かれたままなので、画面遷移の考慮をしないで済む、という点では
シンプルなプログラムになって...続きを読む

Aベストアンサー

以下サンプルとして超雑にかいておきます。
あくまでフローをみるサンプルなのではしょっているので
そのままでは実用には耐えないと思います
(たぶんjQueryあたりを使えばもう少しらくにいけるとおもいます)

<html>
<head>
<script>
function test(){
var list={"":"選んでね!","x":"x","y":"y","z":"z"};
var nWin=document.createElement("div");
nWin.id="nWin";
var n=document.createTextNode("test");
nWin.appendChild(n);

var s=document.createElement("select");
for(var i in list){
var o=document.createElement("option");
o.setAttribute("value",i);
o.appendChild(document.createTextNode(list[i]));
s.appendChild(o);
}
s.onchange=function(){
document.getElementById("hoge").value=this.value;
nWin.parentNode.removeChild(nWin);
};
nWin.appendChild(s);

document.getElementsByTagName("body")[0].appendChild(nWin);
}
</script>
<style>
#nWin{
height:300px;
width:300px;
background-Color:red;
z-index:2;
position:absolute;
top:100px;
left:100px;
}
.testarea{
width:100%;
height:100px;
}
.yellow{background-Color:yellow;}
.lime{background-Color:lime;}
.aqua{background-Color:aqua;}
</style>
</head>
<body>
<div class="testarea yellow">test</div>
<div class="testarea lime">
<input type="text" name="hoge" id="hoge">
<input type="button" value="test" onclick="test()">
</div><div class="testarea aqua">test</div>
</body>

nWinをwindow.openで処理しても同じような感じになると思います

以下サンプルとして超雑にかいておきます。
あくまでフローをみるサンプルなのではしょっているので
そのままでは実用には耐えないと思います
(たぶんjQueryあたりを使えばもう少しらくにいけるとおもいます)

<html>
<head>
<script>
function test(){
var list={"":"選んでね!","x":"x","y":"y","z":"z"};
var nWin=document.createElement("div");
nWin.id="nWin";
var n=document.createTextNode("test");
nWin.appendChild(n);

var s=document.createElement("select");
for(...続きを読む

Qウィンドウのフォーカスについて

お疲れ様です。

親.html、子.html、孫.htmlと展開しており、それぞれ親子孫関係が成立していた場合、孫.htmlを常に最前面に表示する場合はどういう記述をすればよろしいのでしょうか。ご教示ねがいます。

Aベストアンサー

それぞれのwindowのonLoad時に、孫windowにフォーカスがあたるようfunctionを呼んでやればいいと思います。
孫の場合は、
self.window.focus();
親、子の場合は、
孫のwindow名.window.focus();
でいけるのではないかと。

クロスブラウザ対応かどうかはわかりませんが。

Q子ウィンドウの存在確認

子ウィンドウが開いていない場合にのみ子ウィンドウを開くような下記の処理があるとします。

function OpenSubWindow()
{
if(!w.closed()){
alert('閉じろ!');
}else{
w = window.open("a.html","sub","resizable=no,scrollbars=no");
}
}

この場合、当然のことですが、変数wはelseの中で初めて初期化されるため、ifの条件でオブジェクトが存在しないことによりエラーが発生します。

でも、"sub"というname属性のウィンドウが開いているかどうかを確認したいのですが、どうすればよいのでしょうか?wを初期化する方法が何かあるのでしょうか?それとも、subウィンドウのopen/closeの状態を管理するロジックを作りこまないといけないのでしょうか?

Aベストアンサー

細かなロジックを考える必要はありませんよ。
w がオブジェクトかどうか分からない時点で w.closed を評価するのがマズイだけですから、評価の順番を変えればいいんです。

var w;
function OpenSubWindow() {
  if (!w || w.closed)
    w = window.open("a.html", "sub", "resizable=no,scrollbars=no");
  else
    alert("閉じろ!");
}

ちなみに closed はメソッドではなくプロパティですので、w.closed() ではエラーとなります。
また、既に開いているときの処理は
  w.focus();
とすれば子ウィンドウがアクティブになるのでオススメです。

Q特定のウィンドウ名を持つウィンドウの有無を判別

お世話になります。

現在、以下のスクリプトでPageA.htmlのボタンをクリックすると
新ウィンドウを開きPageB.jspを表示し、PageA.htmlは閉じます。
/* PageA.html */
function submitPageB(){
// "WindowB"が既に存在する場合は閉じる
var dummy = window.open("","WindowB","");
dummy.close();

// 待ち受けページを開く
var win = window.open("NowLoading.html","WindowB","width=800,height=600,scrollbars=no,resizable=no");

// WindowBにpost形式でパラメータ送信
with(window.document.formA){
action="PageB.jsp";
method="post";
target="WindowB";
submit();
}

//PageA.htmlを閉じる
window.close();
}

これを"WindowB"が存在するか判別して
"WindowB"がなければそのまま開く、
"WindowB"があればconfirmで新たに開くか開かないかを
選択させるようにしたいのですが、
"WindowB"というウィンドウ名のウィンドウを
取得する方法がわからないため実現できません。

var blWin = true;//※ここで"WindowB"が存在するかどうかを取得したい

if(!blWin || confirm("既に開いています。新たに開きますか?")){
submitPageB();
}

特定のウィンドウ名のウィンドウの有無を知る方法、
あるいは上記のことを実現させるよい案はないでしょうか?

よろしくお願いします。

お世話になります。

現在、以下のスクリプトでPageA.htmlのボタンをクリックすると
新ウィンドウを開きPageB.jspを表示し、PageA.htmlは閉じます。
/* PageA.html */
function submitPageB(){
// "WindowB"が既に存在する場合は閉じる
var dummy = window.open("","WindowB","");
dummy.close();

// 待ち受けページを開く
var win = window.open("NowLoading.html","WindowB","width=800,height=600,scrollbars=no,resizable=no");

// WindowBにpost形式でパラメータ送信
with(window.document.f...続きを読む

Aベストアンサー

できないと思います。

QASPで画面間のパラメタ受け渡し

こんばんは。ASP初心者です。
ASPでWEBページの作成を行っています。画面遷移をResponse.Redirect()で行っているのですが、遷移前のページと遷移後のページでパラメタを受け渡したい場合はSession("hoge") = "hogehoge"のようにセッションに入れる以外、何か方法はないでしょうか。リクエスト間でパラメタ渡せればがいいので、セッションを通じて保持しておく必要がないのです。クエリを使用するとアドレス欄に変数の値が見えてしまうのでできれば使いたくありません。

Aベストアンサー

1. Cookieを使う
2. 画面遷移を postで行い、hidden項目に値をセットする (要JavaScript)

私は面倒なのでセッション変数使ってますが、必要なくなればセッションをクリアすれば良いだけだと思います。

Session.Contents("hoge") = Empty

Qyyyymmddからyyyy/mm/ddへの変換

いつもお世話になっております。
Aと言う変数にはyyyymmddの値が入っていて
Aをyyyy/mm/ddにしてBの変数に入れたい場合の処理がわかりません。
調べたところ、SimpleDateFormatクラスと言うものを使えばよいと言うことが判明しました。
しかし、今まで使ったことがないのでよくわかりません。
変数Aと変数BはどちらもString型です。
ご教授お願い致します。

Aベストアンサー

 こんにちは。

 本当に変数aの中の文字列が厳密にyyyyMMddの形式のなっているのなら、普通に

String b = a.substring(0, 4) + "/" + a.substring(4, 6) + "/" + a.substring(6, 8);

 これでいいと思いますが、いったんDate型にする必要があったり、ちゃんと日付として認識できるか確かめる必要がある場合は、

String a = "20051029";

SimpleDateFormat formatter = (SimpleDateFormat)DateFormat.getDateInstance();
formatter.applyPattern("yyyyMMdd");
try {
  Date date = formatter.parse(a);
  formatter.applyPattern("yyyy/MM/dd");
  String b = formatter.format(date);
  System.out.println(b);
}
catch (ParseException ex) {
  System.out.println("解析失敗");
}

 こんな感じでいいんじゃないでしょうか。

 こんにちは。

 本当に変数aの中の文字列が厳密にyyyyMMddの形式のなっているのなら、普通に

String b = a.substring(0, 4) + "/" + a.substring(4, 6) + "/" + a.substring(6, 8);

 これでいいと思いますが、いったんDate型にする必要があったり、ちゃんと日付として認識できるか確かめる必要がある場合は、

String a = "20051029";

SimpleDateFormat formatter = (SimpleDateFormat)DateFormat.getDateInstance();
formatter.applyPattern("yyyyMMdd");
try {
  Date date = formatter.p...続きを読む

Qウインドウの後ろに隠れているページを前面に出したいんです。

「呼び出し元ページ」をA
「呼び出されるWINDOWページ」をB
と例えます。

「A」のリンクをクリックすると「B」がNEW WINDOWで開き、既に開いている「B」のリンクをクリックすると背面「A」が手前に来るjavascriptに挑戦しているのですが、うまく動作しないんです。
逆の順序「B」→「A」→「B」もです。
WIN IE6.0では成功しましたが、FIREFOX、ネスケ、Mac safariの最新verではダメでした。
すみません、誰か教えて頂けないでしょうか。

現在「A」「B」のページには下記の記述をしてます。
IEでは大丈夫でした。
別の方法でも良いのでお願いします。

■「呼び出し元ページA、test1.com」
<script language="javascript">
<!--
window.focus();
//-->
</script>

<A href=http://www.test2.com/ target=test>リンク</A>

■「呼び出されるWINDOWページB、test2.com」
<script language="javascript">
<!--
window.focus();
//-->
</script>

<A href=http://www.test1.com/ target=test>リンク</A>

「呼び出し元ページ」をA
「呼び出されるWINDOWページ」をB
と例えます。

「A」のリンクをクリックすると「B」がNEW WINDOWで開き、既に開いている「B」のリンクをクリックすると背面「A」が手前に来るjavascriptに挑戦しているのですが、うまく動作しないんです。
逆の順序「B」→「A」→「B」もです。
WIN IE6.0では成功しましたが、FIREFOX、ネスケ、Mac safariの最新verではダメでした。
すみません、誰か教えて頂けないでしょうか。

現在「A」「B」のページには下記の記述をしてます。
IEでは大丈...続きを読む

Aベストアンサー

簡潔すぎてすいませんでした。
子画面から親画面を呼んで前面に出すようにするには
window.opener.document.focus();
というシンタックスでできます(windowは省略可)。
また、window.opener.focus();という書き方でも可。
コードを書くことにはなれていらっしゃるようですので
やってみてください。

>WIN IE6.0では成功しましたが、FIREFOX、ネスケ、
>Mac safariの最新verではダメでした。

IEとMozillaやその他のブラウザでは仕様のちがいから
振るまいがおなじではありません。たとえば、IEでは
window.openerが読み取り専用プロパティではありませんが、他の仕様はちがいます。したがって、IEはヘンスク
リプトを組むとヘンなことになる可能性があります。


人気Q&Aランキング