Как я могу открыть новое окно, используя URL-адрес, созданный внутри функции обратного вызова getScript, и избежать блокирования всплывающих окон? - PullRequest
5 голосов
/ 04 ноября 2010

Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь сделать что-то вроде приведенного ниже кода, окно будет заблокировано блокировщиками всплывающих окон.Я использую getScript, чтобы я мог делать междоменные запросы.Я использую jQuery 1.4.2, чтобы сделать следующее.

Пример кода, который будет заблокирован:

//Code that gets blocked by pop-up blockers
$(document).ready(function(){
    $(".popup").click(function(){
        $.getScript("URL_To_A_Javascript_File", function(){
            window.open("dynamicURL", "_blank");
        });
    });
});

Пример кода, который проходитблокировщики, но не получает URL-адрес во времени:

//This code will get past the pop-up blocker, but the var url won't be updated 
//with the dynamicURL before the window.open() fires in browsers 
//like safari or chrome.
$(document).ready(function(){
    var url;
    $(".popup").click(function(){
        $.getScript("URL_To_A_Javascript_File", function(){
            url = "dynamicURL";
        });
        window.open(url, "_blank");
    });
});

Как открыть новое окно, используя URL-адрес, созданный внутри функции обратного вызова getScript, и избежать блокирования всплывающих окон?

Ответы [ 3 ]

6 голосов
/ 04 ноября 2010

Хорошо, похоже, я наконец понял, как сделать то, что я пытался сделать.

Этот способ позволяет мне делать всплывающее окно без необходимости промежуточной страницы, которая обрабатывает JavaScript.

var newWin;
$(document).ready(function(){
    $(".popup").click(function(){
        newWin = window.open();

        $.getScript("URL_To_A_Javascript_File", function() {
            newWin.location = "DynamicURL";
        });
        return false;
    });
});
1 голос
/ 04 ноября 2010

Вы не можете избежать блокировщиков всплывающих окон, и давайте все будем благодарны за это.

Когда ваш код открывает окно из какого-либо цикла событий, который не является прямым результатом действий пользователя (в основном это означает событие «щелчка»), браузер предполагает, что у пользователя должен быть выбор, видеть ли новое окно.

В случае чего-то похожего на ваш "getScript", обработчик, который вызывается при получении скрипта, находится в одном из таких типов не пользовательских циклов событий, поэтому применяются правила блокировщика.

Возможно, вы могли бы запустить свой код "getScript" из вашего нового окна. Браузер позволит открывать окно из этого обработчика "щелчка".

0 голосов
/ 04 ноября 2010

Просто не работайте с всплывающими окнами, используйте что-то вроде лайтбокса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...