Como boa prática, acho que é uma boa ideia testar se um pop-up foi bloqueado e tomar alguma ação. Você precisa saber que window.open tem um valor de retorno e esse valor pode ser nulo se a ação falhar. Por exemplo, no seguinte código:
function pop(url,w,h) {
n=window.open(url,'_blank','toolbar=0,location=0,directories=0,status=1,menubar=0,titlebar=0,scrollbars=1,resizable=1,width='+w+',height='+h);
if(n==null) {
return true;
}
return false;
}
se o pop-up estiver bloqueado, window.open retornará nulo. Portanto, a função retornará false.
Como exemplo, imagine chamar essa função diretamente de qualquer link com target="_blank"
: se o pop-up for aberto com êxito, o retorno
false
bloqueará a ação do link; caso contrário, se o pop-up for bloqueado, o retorno true
permitirá o comportamento padrão (abrir nova janela _blank) e continuar .
<a href="http://whatever.com" target="_blank" onclick='return pop("http://whatever.com",300,200);' >
Dessa forma, você terá um pop-up, se funcionar, e uma janela em branco, se não estiver.
Se o pop-up não abrir, você pode:
- abra uma janela em branco como no exemplo e continue
- abra um pop-up falso (um iframe dentro da página)
- informe o usuário ("permita pop-ups neste site")
- abra uma janela em branco e informe o usuário etc.