0

Chrome と Opera に問題があり、修正方法がわかりません。JavaScript を使用したポップアップ ブロッカー検出器があり、ブロッカーが有効になっている場合は、div に「このサイトのポップアップを有効にしてください」と出力されます。これは FF、Safari、IE ではうまく機能しますが、Chrome や Opera では機能しません。これらの 2 つのブラウザーでは、div が折りたたまれて表示されますが、テキストは表示されません。誰でもこれを回避でき、何が起こっているのか知っていますか? ありがとうございました!

JS

function detectPopupBlocker() {
    var alertDiv = document.getElementById('popupAlert');
    console.log(alertDiv); // This prints to the console in Chrome and Opera
    var popupTest = window.open("about:blank","","directories=no,height=100,width=100,menubar=no,resizable=no,scrollbars=no,status=no,titlebar=no,top=0,location=no");
    if (!popupTest) {
        alertDiv.innerHTML += 'Your popup blocker is detected.<br />Please enable popups for this site.';
    } else {
        popupTest.close();
    }
}
window.onload = detectPopupBlocker;
4

2 に答える 2

1

ポップアップ ブロッカーが有効になっているときに window.open() が偽のウィンドウ オブジェクトを返すようにするのには、2 つの正当な理由があります (またはありました)。

  1. 一部のサイト/アプリは、ポップアップのブロックを検出しようとし、ユーザーにブロッカーを無効にして、広告やその他の悪用に耐えるよう強制する場合があります

  2. ポップアップ ブロッキングを実装したときは、返されるオブジェクトがないとスクリプトが機能しなくなることがよくありました。つまり、win.closed をチェックしたいが、「win」が未定義に設定されている場合です。

一部のブラウザではポップアップ ブロックの実装が異なるため、この「機能」は不要になる可能性があります。

于 2013-02-07T10:11:29.627 に答える
0

window.open()Opera と Chromeは、ポップアップがブロックされていてもからオブジェクトを返すためelse、これらのブラウザでは実行が直接 にジャンプします。これは、Chrome または Opera でポップアップ ブロッカーがオンになっているかどうかを、現在のコードでは検出できないことを意味します。

ただし、 で使用可能な既知の要素があるかどうかを検出しようとすることはできますがpopupTest、この場合は、about:blank.

var isPopup = false,
    popupTest = window.open(...);
try {
    if (popupTest.document.getElementById('a_known_id')) {
        isPopup = true;
    }
} catch (err) {isPopup = false;}
if (isPopup) {...}
于 2013-02-08T17:33:59.463 に答える