Estou tentando abrir um URL em uma nova guia, em vez de uma janela pop-up.
Já vi perguntas relacionadas nas quais as respostas se pareceriam com:
window.open(url,'_blank');
window.open(url);
Mas nenhum deles funcionou para mim, o navegador ainda tentou abrir uma janela pop-up.
javascript
Marca
fonte
fonte
Respostas:
Nada que um autor possa fazer pode optar por abrir em uma nova guia em vez de em uma nova janela; é uma preferência do usuário . (Observe que a preferência padrão do usuário na maioria dos navegadores é para novas guias, portanto, um teste trivial em um navegador onde essa preferência não foi alterada não demonstrará isso.)
O CSS3 propôs novo alvo , mas a especificação foi abandonada .
O contrário não é verdadeiro; especificando dimensões para a janela no terceiro argumento de
window.open()
, você pode acionar uma nova janela quando a preferência for por guias.fonte
window.open
indica ao navegador para abrir algo novo e, em seguida, o navegador abre o que é escolhido em suas configurações - guia ou janela. Nos navegadores com os quais você testou, altere as configurações para abrir em uma nova janela em vez de em uma guia e você verá que as soluções dos outros estão erradas.Isso é um truque,
Na maioria dos casos, isso deve acontecer diretamente no
onclick
manipulador do link para impedir bloqueadores de pop-up e o comportamento padrão de "nova janela". Você pode fazer dessa maneira ou adicionando um ouvinte de evento ao seuDOM
objeto.http://www.tutsplanet.com/open-url-new-tab-using-javascript/
fonte
window.open()
não abrirá em uma nova guia se não estiver acontecendo no evento de clique real. No exemplo dado, o URL está sendo aberto no evento de clique real. Isso funcionará desde que o usuário tenha as configurações apropriadas no navegador .Da mesma forma, se você estiver tentando fazer uma chamada Ajax na função click e quiser abrir uma janela com sucesso, verifique se está fazendo a chamada Ajax com a
async : false
opção definida.fonte
async: false
não funciona no Chrome. Para abrir uma nova janela a partir do retorno de chamada, é necessário primeiro abrir uma janela vazia antes de enviar a solicitação HTTP e atualizá-la posteriormente. Aqui está um bom truque .window.open
Não é possível abrir pop-ups de maneira confiável em uma nova guia em todos os navegadoresNavegadores diferentes implementam o comportamento de
window.open
maneiras diferentes, especialmente no que diz respeito às preferências do navegador do usuário. Você não pode esperar que o mesmo comportamentowindow.open
seja verdadeiro em todo o Internet Explorer, Firefox e Chrome, devido às diferentes maneiras pelas quais eles lidam com as preferências do navegador de um usuário.Por exemplo, os usuários do Internet Explorer (11) podem optar por abrir pop-ups em uma nova janela ou em uma nova guia. Você não pode forçar os usuários do Internet Explorer 11 a abrir pop-ups de uma certa maneira
window.open
, como mencionado na resposta de Quentin .Quanto aos usuários do Firefox (29), o uso
window.open(url, '_blank')
depende das preferências da guia do navegador, embora você ainda possa forçá-los a abrir pop-ups em uma nova janela especificando largura e altura (consulte a seção "O que acontece com o Chrome?" Abaixo).Demonstração
Vá para as configurações do seu navegador e configure-o para abrir pop-ups em uma nova janela.
Internet Explorer (11)
Página de teste
Após configurar o Internet Explorer (11) para abrir pop-ups em uma nova janela, como demonstrado acima, use a seguinte página de teste para testar
window.open
:Observe que os pop-ups são abertos em uma nova janela, não em uma nova guia.
Você também pode testar esses trechos acima no Firefox (29) com sua preferência de guia configurada para novas janelas e ver os mesmos resultados.
E o Chrome? Implementa de forma
window.open
diferente do Internet Explorer (11) e Firefox (29).Não tenho 100% de certeza, mas parece que o Chrome (versão
34.0.1847.131 m
) não parece ter nenhuma configuração que o usuário possa usar para escolher se deseja abrir pop-ups ou não em uma nova janela ou em uma nova guia (como Firefox e Internet Explorer ter). Verifiquei a documentação do Chrome para gerenciar pop-ups , mas ela não mencionou nada sobre esse tipo de coisa.Além disso, mais uma vez, diferentes navegadores parecem implementar o comportamento de maneira
window.open
diferente. No Chrome e Firefox, a especificação de largura e altura forçará um pop-up, mesmo quando um usuário configurou o Firefox (29) para abrir novas janelas em uma nova guia (conforme mencionado nas respostas ao JavaScript abertas em uma nova janela, não na guia ) :No entanto, o mesmo trecho de código acima sempre abrirá uma nova guia no Internet Explorer 11 se os usuários definirem guias como suas preferências do navegador, nem mesmo especificar largura e altura forçará uma nova janela pop-up para eles.
Portanto, o comportamento do
window.open
Chrome parece ser abrir pop-ups em uma nova guia quando usado em umonclick
evento, abri-los em novas janelas quando usados no console do navegador ( conforme observado por outras pessoas ) e abri-los em novas janelas quando especificado com uma largura e uma altura.Sumário
Navegadores diferentes implementam o comportamento de maneira
window.open
diferente em relação às preferências do navegador dos usuários. Você não pode esperar que o mesmo comportamentowindow.open
seja verdadeiro em todo o Internet Explorer, Firefox e Chrome, devido às diferentes maneiras pelas quais eles lidam com as preferências do navegador de um usuário.Leitura Adicional
window.open
documentação .fonte
Um forro:
Ele cria um
a
elemento virtual ,target="_blank"
abre-o em uma nova guia, fornece-o corretamenteurl
href
e clica nele.E se você quiser, com base nisso, você pode criar alguma função:
e então você pode usá-lo como:
Nota importante:
openInNewTab
(assim como qualquer outra solução nesta página) deve ser chamada durante o retorno de chamada da ação do usuário - por exemplo, evento de clique interno (não necessário diretamente na função de retorno de chamada, mas durante a ação de clique).Se você chamá-lo manualmente em algum momento aleatório (por exemplo, dentro de um intervalo ou após a resposta do servidor) - ele pode ser bloqueado pelo navegador (o que faz sentido, pois seria um risco à segurança e pode levar a uma experiência muito ruim do usuário )
fonte
$('<a />',{'href': url, 'target', '_blank'}).get(0).click();
Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();
Se você usar
window.open(url, '_blank')
, ele será bloqueado (bloqueador de pop-ups) no Chrome.Tente o seguinte:
Com JavaScript puro,
fonte
the request was made in a sandboxed frame whose 'allow-popups' permission is not set
Para elaborar a resposta de Steven Spielberg, fiz o seguinte:
Dessa forma, pouco antes do navegador seguir o link, estou definindo o atributo target, para que ele seja aberto em uma nova guia ou janela ( depende das configurações do usuário ).
Um exemplo de linha no jQuery:
Isso também pode ser realizado apenas usando as APIs DOM do navegador nativo:
fonte
Eu uso o seguinte e funciona muito bem!
fonte
Eu acho que você não pode controlar isso. Se o usuário configurou o navegador para abrir links em uma nova janela, você não pode forçar a abertura de links em uma nova guia.
JavaScript aberto em uma nova janela, não na guia
fonte
Um fato interessante é que a nova guia não pode ser aberta se a ação não for invocada pelo usuário (clicando em um botão ou algo assim) ou se for assíncrona, por exemplo, isso NÃO será aberto em uma nova guia:
Mas isso pode abrir em uma nova guia, dependendo das configurações do navegador:
fonte
<script>open('http://google.com')</script>
em um.html
arquivo e abra-o em uma nova instalação de uma versão recente do Firefox; você observará que o Firefox abre felizmente o Google em uma nova guia (talvez depois que você diz para permitir pop-ups), não em uma nova janela.A omissão dos parâmetros [strWindowFeatures] abrirá uma nova guia, a menos que a configuração do navegador substitua (a configuração do navegador supera o JavaScript).
Nova janela
Nova aba
- ou -
fonte
fonte
Você pode usar um truque com
form
:Demonstração do jsFiddle
fonte
name
como chave evalue
como valor todos os parâmetros dentro dos parâmetros de consulta. E então envie o formulárioa
tag em vez de um formulário e usando o.click()
método jQuery para "enviá-lo". Verifique a minha respostaIsso não tem nada a ver com as configurações do navegador se você estiver tentando abrir uma nova guia a partir de uma função personalizada.
Nesta página, abra um console JavaScript e digite:
E ele tentará abrir um pop-up independentemente das suas configurações, porque o 'clique' vem de uma ação personalizada.
Para se comportar como um 'clique do mouse' real em um link, você precisa seguir o conselho de @ spirinvladimir e realmente criá-lo:
Aqui está um exemplo completo (não tente no jsFiddle ou em editores on-line similares, pois não permitirá que você redirecione para páginas externas a partir daí):
fonte
w = window.open("placeholder"); $.ajax(...ajax call that returns the url...) success (...w.location = data.url...)
como por theandystratton.com/2012/...fonte
JQuery
JS
fonte
Ou você pode simplesmente criar um elemento de link e clicar nele ...
Isso não deve ser bloqueado por nenhum bloqueador de pop-ups ... Espero que sim.
fonte
Há uma resposta para esta pergunta e não é não.
Etapa 1: crie um link invisível:
<a id="yourId" href="yourlink.html" target="_blank" style="display: none;"></a>
Etapa 2: clique nesse link programaticamente:
document.getElementById("yourId").click();
Aqui está! Funciona um charme para mim.
fonte
Eu pesquisei muitas informações sobre como abrir uma nova guia e permanecer na mesma guia. Eu encontrei um pequeno truque para fazê-lo. Vamos supor que você tenha um URL que você precisa abrir - newUrl e antigo url - currentUrl , no qual você precisa permanecer após a nova guia ser aberta. O código JS terá a seguinte aparência:
fonte
Que tal criar um valor de atributo
<a>
with_blank
astarget
e ourl
ashref
, com exibição de estilo: escondido com aa elemento filhos? Em seguida, adicione ao DOM e acione o evento click em um elemento filho.ATUALIZAR
Isso não funciona. O navegador evita o comportamento padrão. Pode ser acionado programaticamente, mas não segue o comportamento padrão.
Verifique e veja você mesmo: http://jsfiddle.net/4S4ET/
fonte
A abertura de uma nova guia a partir de uma extensão do Firefox (Mozilla) é assim:
fonte
Dessa forma, é semelhante à solução acima, mas implementada de maneira diferente
.social_icon -> alguma classe com CSS
fonte
Isso pode ser um hack, mas no Firefox, se você especificar um terceiro parâmetro, 'fullscreen = yes', ele abrirá uma nova janela.
Por exemplo,
Parece realmente substituir as configurações do navegador.
fonte
esse trabalho para mim, apenas impeça o evento, adicione o URL a um e, em
<a>
tag
seguida, acione o evento click neletag
.fonte
O
window.open(url)
URL será aberto na nova guia do navegador. Abaixo JS alternativa para eleaqui está um exemplo de trabalho (os snippets stackoverflow não permitem abrir uma nova guia)
fonte
A abertura do URL em uma nova guia ou em uma nova janela é realmente controlada pelas preferências do navegador do usuário. Não há como substituí-lo no JavaScript.
window.open()
se comporta de maneira diferente dependendo de como está sendo usado. Se for chamado como resultado direto de uma ação do usuário , digamos que um clique no botão deve funcionar bem e abrir uma nova guia (ou janela):No entanto, se você tentar abrir uma nova guia a partir de um retorno de chamada de solicitação AJAX , o navegador a bloqueará como se fosse uma ação direta do usuário.
Para ignorar o bloqueador de pop-ups e abrir uma nova guia a partir de um retorno de chamada, aqui está um pequeno truque :
fonte
Eu tentei dessa maneira e parece funcionar bem
Encontrei muitos exemplos de trabalho aqui:
http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html#TestPopupControl
fonte
Vou concordar um pouco com a pessoa que escreveu (parafraseada aqui): "Para um link em uma página da web existente, o navegador sempre abrirá o link em uma nova guia se a nova página fizer parte do mesmo site que a página da web existente ". Para mim, pelo menos, essa "regra geral" funciona no Chrome, Firefox, Opera, IE, Safari, SeaMonkey e Konqueror.
De qualquer forma, existe uma maneira menos complicada de tirar proveito do que a outra pessoa apresentou. Supondo que estamos falando do seu próprio site ("thissite.com" abaixo), onde você deseja controlar o que o navegador faz, em seguida, abaixo, você deseja que "specialpage.htm" seja VAZIO, sem HTML nele ( economiza tempo enviando dados do servidor!).
fonte
Se você deseja apenas abrir os links externos (links que acessam outros sites), esse bit de JavaScript / jQuery funciona bem:
fonte
O navegador sempre abrirá o link em uma nova guia se o link estiver no mesmo domínio (no mesmo site). Se o link estiver em outro domínio, ele será aberto em uma nova guia / janela, dependendo das configurações do navegador.
Então, de acordo com isso, podemos usar:
E adicione algum código jQuery:
Portanto, primeiro abra uma nova janela no mesmo site com o destino _blank (ele será aberto em uma nova guia) e, em seguida, abra o site desejado dentro dessa nova janela.
fonte