SSブログ

Firefoxでwindow.setTimeoutを使ってもポップアップブロックされないスクリプトの一例 [メール投稿]

ポップアップブロックの設定とトラブルシューティング | Firefox ヘルプ
ポップアップウィンドウ をブロックする: ポップアップブロックをすべて無効にするには、このオプション のチェックを外してください

 私はFirefoxのオプションの「コンテンツ」パネルで「ポップアップウィンドウ をブロックする」のチェックを外して使っているのだが、チェックした状態でも、window.open()でポップアップを開こうとするページでポップアップをブロックしないことがあり、いろいろな方法があるようだが、難しくてよく分からない。
 window.open()はページを開いた時に実行されるようだとブロックされるのだが、リンクタグ<a>でonclickを使って開く時はブロックされないらしい。でも、window.setTimeoutを使うとブロックされるらしい。
 でも、window.setTimeoutを使っても、1秒以内ならブロックされなかったり、window.setTimeoutを使わずにポップアップウインドウが表示されていて、そこに名前が付けられていて、その名前のウインドウにwindow.setTimeoutで開いた場合はブロックされないらしい。
 頭が混乱してよく分からないのだが、とにかく、次のようなスクリプトを作って試してみた。

<script type="text/javascript">
<!--
function sample1() {
var popup = window.open("","","width=600,height=500");
var addscript = document.createElement('script');
addscript.type = "text/javascript";
var text = document.createTextNode('window.name="sample"');
addscript.appendChild(text);
popup.document.body.appendChild(addscript);
}
function sample2() {
window.open("http://www002.upp.so-net.ne.jp/self/","sample");
}
function sample3() {
window.open("http://www002.upp.so-net.ne.jp/self/","sample","width=600,height=500");
}
// -->
</script>
<a onclick='sample1();window.setTimeout(function() {sample2();},1);'>(1/1000)秒後にポップアップで私のサイトを開く</a><br />
<a onclick='sample1();window.setTimeout(function() {sample2();},1000);'>1秒後にポップアップで私のサイトを開く</a><br />
<a onclick='sample1();window.setTimeout(function() {sample2();},2000);'>2秒後にポップアップで私のサイトを開く</a><br />
<a onclick='window.setTimeout(function() {sample3();},1000);'>1秒後にポップアップで私のサイトを開く</a><br />
<a onclick='window.setTimeout(function() {sample3();},2000);'>2秒後にポップアップで私のサイトを開く(ポップアップブロック対象)</a><br />


以下は、上のスクリプトをこの記事に張り付けてみたもの。
(1/1000)秒後にポップアップで私のサイトを開く
1秒後にポップアップで私のサイトを開く
2秒後にポップアップで私のサイトを開く
1秒後にポップアップで私のサイトを開く
2秒後にポップアップで私のサイトを開く(ポップアップブロック対象)


追記(2015/5/2):
 思考途中のおまけ。
 ページを開いた時にはポップアップブロックされるが、リンクをクリックした時にはブロックされないスクリプト。
 ページを開いた時にブロックされないように改造したいのだが、それ以前に、ポップアップを閉じずにリンクをクリックすると、新しいポップアップが開いて、以前に開いたポップアップの方にジャンプ先のページを開くバグがある。ただ、先に開いたポップアップの方の名前が変わると、後から開いたポップアップの方にジャンプ先のページが開く。ソネブロを開くと、そのページの名前はソネブロデフォルトに変わってしまうので、ポップアップを閉じずに新しいポップアップを開いた時に新しい方に表示されることを確認できる。私のサイトや私の独り言のページのようにウインドウ名を強制的に変えないサイトでは、後から開いたポップアップには表示されない。

<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.1.js"></script>
<script type="text/javascript">
<!--
function popup1(url,wtime,wname) {
var popup = window.open("","","width=600,height=500");
var addscript = document.createElement('script');
addscript.type = "text/javascript";
addscript.innerHTML='window.name="'+wname+'";';
popup.document.body.appendChild(addscript);
window.setTimeout(function() {popup2(url,wname);},wtime);
}
function popup2(url,wname) {
window.open(url,wname);
}
window.onload = function() {$("#popupw0").click();}
// -->
</script>
</head>
<body>
<a id="popupw0" onclick='popup1("http://www002.upp.so-net.ne.jp/self/","1","popupw0");'>(1/1000)秒後にポップアップ(popupw0)で私のサイトを開く</a><br />
<a id="popupw1" onclick='popup1("http://www002.upp.so-net.ne.jp/self/","1000","popupw1");'>1秒後にポップアップ(popupw1)で私のサイトを開く</a><br />
<a id="popupw2" onclick='popup1("http://www.geocities.jp/selfmirror7777/robamimi/roba0000.html","2000","popupw2");'>2秒後にポップアップ(popupw2)で私の独り言を開く</a><br />
<a id="popupw0" onclick='popup1("http://self.blog.so-net.ne.jp/","1","popupw4");'>(1/1000)秒後にポップアップ(popupw4)で私のブログを開く</a><br />
</body>
</html>

(1/1000)秒後にポップアップ(popupw0)で私のサイトを開く
1秒後にポップアップ(popupw1)で私のサイトを開く
2秒後にポップアップ(popupw2)で私の独り言を開く
(1/1000)秒後にポップアップ(popupw4)で私のブログを開く


追記(2015/5/2):
 思考途中のおまけ。ブックマークレット編。

Firefoxにポップアップブロックされないブックマークレット。

Firefoxにポップアップブロックされるブックマークレット。


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

nice! 0

コメント 0

コメントを書く

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

トラックバック 0

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