ポップアップでWindowを開くページがありました。
複数のリンクがあるけど、同じリンク先がいくつか現れる可能性もあります。
Windowをポップアップした状態で、また同じポップアップリンクを押してしまった場合、もうWindowは開かないという処理が必要です。
こんな時はwindowのnameプロパティを使って制御するわけですが、IEで見ると何故かwindow.nameを参照したところで止まってしまいます。
var win; // グローバル変数でWindowオブジェクトを管理
$('#elm').click(function() {
var win_name = $('input[name="xx"]').val();
if (win && win.name == win_name) {
return false;
}
win = window.open('xx.html', win_name);
});
まぁザックリとこんな感じです。
これはChromeとかFirefoxでは動くけどIE9で見てたらif文のところで止まる場合があります。
止まる「場合がある」というのは、止まらない場合もあるということです。
window.openしたWindowを閉じてから、また別のリンクを開こうとした際に止まるようです。
1回目ポップアップを開いた時は、グローバル変数のwinは空なので、if文を抜けてwindow.openします。
そして、そのWindowを閉じてからもう一回ポップアップを開く時、winにはWindowオブジェクトが格納されているのですが、プロパティを参照できない状態という感じなんだと思います。
なので、Windowが閉じたかどうかをチェックしないといけなかったわけです。
var win; // グローバル変数でWindowオブジェクトを管理
$('#elm').click(function() {
var win_name = $('input[name="xx"]').val();
if (win && !win.closed && win.name == win_name) {
return false;
}
win = window.open('xx.html', win_name);
});
こうして、window.closedプロパティを見れば無事思った動作になりました。
分かりにくかったのは、winにWindowオブジェクトが入ってるけど、もうWindowのプロパティがないという状態だったということですね。
多分Chromeとかだと、windowを閉じた時点でwin自体がnullになってるんでしょうか?
そこまでチェックはしてないけど、とりあえず解決できました。
0 件のコメント:
コメントを投稿