SSブログ

Firefoxのwindow.openの謎(同じ名前のウインドウやタブで開いたり開かなかったり) [メール投稿]

正己さんはTwitterを使っています: "謎は一つ解けたが、同じ名前で開く場合と開かない場合があること、同じJavascriptなのにウインドウが開く場合とタブで開く場合があること、ウインドウで開けば同じウインドウで開くのにタブだと別のタブで開いてしまうことの理由が分かってない。"
...

こんなソースを作って試してみた。
<html>
<head>
<script type="text/javascript" language="javascript">
<!--
function sample1() {
window.open("http://www002.upp.so-net.ne.jp/self/","sample","width=600,height=500");
}
function sample2() {
window.open("http://www.geocities.jp/selfmirror7777/robamimi/roba0000.html","sample");
}
function sample3() {
window.open("http://self.blog.so-net.ne.jp/","sample");
}
function sample4() {
window.open("http://self.blog.so-net.ne.jp/","sample","width=600,height=500");
}
function sample5() {
window.open("http://www.rakuten.co.jp/","sample");
}
function sample6() {
window.open("http://www.rakuten.co.jp/","sample","width=600,height=500");
}
// -->
</script>
</head>
<body>
<a onclick="sample1()">ウインドウサイズを指定して私のサイトを開く</a><br />
<a onclick="sample2()">ウインドウサイズを指定せず私の独り言を開く</a><br />
<a onclick="sample3()">ウインドウサイズを指定せず私のブログを開く</a><br />
<a onclick="sample4()">ウインドウサイズを指定して私のブログを開く</a><br />
<a onclick="sample5()">ウインドウサイズを指定せず楽天市場を開く</a><br />
<a onclick="sample6()">ウインドウサイズを指定して楽天市場を開く</a><br />
</body>
</html>

 同じ"sample"という名前なのに、別のウインドウで開いたり、別のタブで開いたりする。
 Firefoxでは about:config の browser.link.open_newwindow.restriction がデフォルトで 2 になっていて、それではJavascriptでウインドウサイズを指定しないと新しいタブで開くらしい。
 だから上のスクリプトで最初にsample2()を実行した場合はタブで開く。ただし、先にsample1()を実行すると同じ名前のウインドウで開く。それは正常。また、先にsample2()を実行した後でsample1()を実行するとウインドウではなくsample2()で開いたタブに開く。たぶんそれも正常。
 しかし、sample3()、sample4()をクリックして、いろいろな順番で試してほしい。わけが分からなくなる。
 いったい、どのようなルールになっているのだろう?
 以下は、上のスクリプトのリンク。
ウインドウサイズを指定して私のサイトを開く
ウインドウサイズを指定せず私の独り言を開く
ウインドウサイズを指定せず私のブログを開く
ウインドウサイズを指定して私のブログを開く
ウインドウサイズを指定せず楽天市場を開く
ウインドウサイズを指定して楽天市場を開く

追記(2015/4/28):
 上のリンクで「私のブログ」(ソネブロ)と「楽天市場」にアクセスすると変になるのは、それらの
ページは自身のウインドウに名前を付けているから。
 楽天市場は ヘッダに次のようにある。
<script language="JavaScript">
<!--
window.name="pWIN";
function openWIN01() {
(省略));
}
//-->
</script>

 ソネブロはページの末尾に次のようにある。
<script type="text/javascript">
var name = "i-aad";
var dc = document.cookie;
var prefix = name + "=";
var begin = dc.indexOf(prefix);
if (begin != -1) {
   var dom_obj = document.getElementById('ad-days-area');
   dom_obj.style.display = "none";
}
</script>

 ソネブロの方は「var name = "i-aad";」が「window.name = "i-aad";」とみなされてる。

追記(2015/5/2):
 【ポップアップウィンドウテスト】のテスト4~テスト7では、ポップアップで私のサイトや私のブログなど他のドメインのページに移動すると、同じウィンドウ名でも同じポップアップに表示されなくなる。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:moblog

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。