145

ときどき、(ユーザー入力または重要な何かのために)新しいウィンドウをポップオープンしようとするWebページに出くわしましたが、ポップアップブロッカーがこれを防ぎます。

新しいウィンドウが正しく起動することを確認するために、呼び出し元のウィンドウはどのようなメソッドを使用できますか?

4

8 に答える 8

182

JavaScript を使用してポップアップを開く場合は、次のようなものを使用できます。

var newWin = window.open(url);             

if(!newWin || newWin.closed || typeof newWin.closed=='undefined') 
{ 
    //POPUP BLOCKED
}
于 2008-08-05T22:03:27.953 に答える
47

上記の例をいくつか試しましたが、Chrome で動作させることができませんでした。この単純なアプローチは、Chrome 39、Firefox 34、Safari 5.1.7、および IE 11 で動作するようです。JS ライブラリのコード スニペットを次に示します。

openPopUp: function(urlToOpen) {
    var popup_window=window.open(urlToOpen,"myWindow","toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, copyhistory=yes, width=400, height=400");            
    try {
        popup_window.focus();   
    } catch (e) {
        alert("Pop-up Blocker is enabled! Please add this site to your exception list.");
    }
}
于 2014-12-31T19:16:29.847 に答える
35

更新: ポップアップは非常に古い時代から存在します。最初のアイデアは、メイン ウィンドウを閉じずに別のコンテンツを表示することでした。現在のところ、これを行う方法は他にもあります。JavaScript はサーバーにリクエストを送信できるため、ポップアップはほとんど使用されません。しかし、時々それらはまだ便利です。

過去には悪質なサイトがポップアップを悪用していました。悪いページは、広告付きのポップアップ ウィンドウを大量に開く可能性があります。そのため、ほとんどのブラウザーはポップアップをブロックしてユーザーを保護しようとしています。

ほとんどのブラウザーは、onclick などのユーザーがトリガーするイベント ハンドラーの外部でポップアップが呼び出された場合、ポップアップをブロックします。

そう考えると、ちょっとむずかしいですね。コードが直接 onclick ハンドラにある場合、それは簡単です。しかし、setTimeout で開くポップアップは何ですか?

このコードを試してください:

 // open after 3 seconds
setTimeout(() => window.open('http://google.com'), 3000);

Chrome ではポップアップが開きますが、Firefox ではブロックされます。

…これは Firefox でも機能します。

 // open after 1 seconds
setTimeout(() => window.open('http://google.com'), 1000);

違いは、Firefox が 2000 ミリ秒以下のタイムアウトを許容できるものとして扱うことですが、それ以降は「ユーザー アクションの範囲外」であると想定して「信頼」を削除します。したがって、最初のものはブロックされ、2 番目のものはブロックされません。


2012年現在の元の回答:

このポップアップ ブロッカー チェックのソリューションは、FF (v11)、Safari (v6)、Chrome (v23.0.127.95) & IE (v7 & v9) でテストされています。displayError 関数を更新して、必要に応じてエラー メッセージを処理します。

var popupBlockerChecker = {
    check: function(popup_window){
        var scope = this;
        if (popup_window) {
            if(/chrome/.test(navigator.userAgent.toLowerCase())){
                setTimeout(function () {
                    scope.is_popup_blocked(scope, popup_window);
                },200);
            }else{
                popup_window.onload = function () {
                    scope.is_popup_blocked(scope, popup_window);
                };
            }
        } else {
            scope.displayError();
        }
    },
    is_popup_blocked: function(scope, popup_window){
        if ((popup_window.innerHeight > 0)==false){ 
            scope.displayError();
        }
    },
    displayError: function(){
       alert("Popup Blocker is enabled! Please add this site to your exception list.");
    }
};

使用法:

var popup = window.open("http://www.google.ca", '_blank');
popupBlockerChecker.check(popup);

お役に立てれば!:)

于 2012-11-30T20:39:57.453 に答える
14

ブラウザーの会社やバージョンに関係なく常に機能する「解決策」の 1 つは、ポップアップを作成するコントロールの近くの画面に警告メッセージを表示することです。アップして、サイトで有効にしてください。

私はそれが空想的でも何でもないことを知っていますが、これ以上簡単にすることはできず、約 5 分間のテストだけで済みます。その後、他の悪夢に移ることができます。

ユーザーがサイトのポップアップを許可したら、ポップアップをやりすぎないようにすることも考慮されます。最後にやりたいことは、訪問者を困らせることです。

于 2016-02-26T22:49:35.260 に答える