2013-07-19 2 views
2

Я подготовил эту jsFiddle: http://jsfiddle.net/x9D4c/9/Trouble выяснить, почему мой всплывающее окно блокируется

В принципе, кнопка с FADEOUT обратного вызова вызывает мое всплывающее окно будет заблокирован, а другой без FADEOUT обратного вызова не делает. Что я должен делать/иначе?

Спасибо за помощь!

Ниже код доступен в jsfiddle.

HTML:

<a href="#" id="anchor1">CauseBlock</a> - <a href="#" id="anchor2">Not Cause Block</a> 

<div id="greenDiv" style="background-color: green;">green div</div> 

JS:

// ################################################ 

function causeBlock() { 
    causeBlockInsideFunction(function() { 
     window.open("http://www.google.com/"); 
    }); 
} 

function causeBlockInsideFunction(callback) { 
    $("#greenDiv").fadeOut(function() { 
     callback(); 
    }); 
} 

// ################################################ 

function notCauseBlock() { 
    notCauseBlockInsideFunction(function() { 
     window.open("http://www.google.com/"); 
    });  
} 

function notCauseBlockInsideFunction(callback) { 
    // [...] 
    callback(); 
} 

// ################################################ 

$(document).ready(function() { 
    $("#anchor1").click(function(e) { 
     causeBlock(); 
    }); 
    $("#anchor2").click(function(e) { 
     notCauseBlock(); 
    }); 
}); 
+0

Где вы размещаете jQuery в Google API? Если javascript, выполняющий перенаправление, связан в другом домене с тем, где находится страница, это может быть причиной автоматического блока. –

+0

Воспроизведено на Chrome. –

+0

Ну, на моем dev environement мой jquery размещен на моем домене (или локальном), а на jsfiddle я не слишком уверен. –

ответ

7

Браузер предотвращает код JS от автоматического открытия всплывающих окон. Это предотвращает наличие страниц, которые автоматически открывают сотни окон. Таким образом, всплывающее открытие ограничено функциями вызовов, которые были вызваны непосредственно некоторым взаимодействием с пользователем (щелчок). Если вы используете анимацию, обратный вызов вызывается из какого-то таймера, который попадает в категорию «автоматический».

+0

Похоже, что это причина блока. Есть ли способ вызвать fadeOut jquery «синхронно», чтобы он не использовал таймеры? –

+0

Не то, чтобы я знал. Поскольку это поведение зависит от браузера, я не думаю, что может быть обходной путь, который будет работать повсюду, но, возможно, кто-то более осведомленный предоставит решение :) – Yann

Смежные вопросы