Abrir programaticamente novas páginas em guias

98

Estou tentando "forçar" o Safari ou o IE7 a abrir uma nova página usando uma nova guia .

Programaticamente, quero dizer algo como:

window.open('page.html','newtaborsomething');
Ricardo Vega
fonte
1
Não tenho certeza se entendi. Você está desenvolvendo um aplicativo que funcione com o IE e deseja abrir cada nova página em uma nova guia? Ou você apenas deseja configurar o IE para abrir uma nova guia ao clicar em um link? Ou você está criando algum site com mais links e deseja que eles abram separadamente? Por favor, deixe isso mais claro.
Dungeo
Obrigado por todos os seus comentários e respostas, sei que isso não é um grande problema e não deve ser um problema no meu desenvolvimento, mas este é um pedido do cliente, não um importante que eu só queria saber. O problema é que o IE7 e o Safari não abrem um pop-up com uma guia usando javascript ou atributo target, certo?
Ricardo Vega

Respostas:

63

Você não pode controlar isso diretamente, porque é uma opção controlada pelos usuários do Internet Explorer.

A abertura de páginas usando Window.open com um nome de janela diferente abrirá em uma nova janela do navegador como um pop-up OU abrirá em uma nova guia, se o usuário configurou o navegador para fazer isso.

thenonhacker
fonte
Quando a opção "Permitir que o Internet Explorer decida como os pop-ups sejam abertos" é selecionada, quais critérios o Internet Explorer usa para tomar essa decisão?
Dead.Rabit
113

Você pode, no Firefox funcionar, adicionar o atributo target = "_ newtab" à âncora para forçar a abertura de uma nova guia.

<a href="some url" target="_newtab">content of the anchor</a>

Em javascript você pode usar

window.open('page.html','_newtab');

Dito isso, concordo parcialmente com Sam. Você não deve forçar o usuário a abrir novas páginas ou uma nova guia sem mostrar a eles uma dica sobre o que vai acontecer antes de clicarem no link.

Deixe-me saber se ele funciona em outro navegador (não tenho a chance de experimentá-lo em outro navegador além do Firefox no momento).

Editar: referência adicionada para ie7 Talvez este link possa ser útil
http://social.msdn.microsoft.com/forums/en-US/ieextensiondevelopment/thread/951b04e4-db0d-4789-ac51-82599dc60405/

Eineki
fonte
6
Obrigado por esta dica do Firefox, agora eu atualizei meu addon TargetKiller para remover "_newtab" e "newtab". : P
thenonhacker
1
Agradeço muito sua resposta, mas sei que o Firefox fará isso (alguns textos, não testados por mim, observam que isso nem sempre é verdade, há uma chance de 50-50 de obter uma nova janela ou guia). Eu também acho que isso não deve ser um problema, mas, você conhece os clientes :)
Ricardo Vega
2
Este pode não ser o caso em todas as compilações / plataformas, mas o Firefox 3.5 no Linux não permite que você faça isso mais de uma vez ... se você tiver vários links target = "_ newtab" em sua página, clicando em qualquer um deles irá preencher apenas uma única nova guia ... ou seja, os cliques subsequentes sobrescreverão tudo o que foi aberto anteriormente nessa guia. Me faz pensar que isso está realmente abrindo uma guia chamada "_newtab", em vez de ser uma solução alternativa específica do navegador.
Rylee Corradini
55
Tenho certeza de que "_newtab" não tem sentido, a menos que alguém tenha documentação em contrário. Tudo o que você está fazendo é abrir uma janela cujo nome é _newtab (é por isso que todos os links subsequentes com esse destino são abertos na mesma janela). Você pode selecionar "foo" ou "bar" e ver o mesmo comportamento. Os únicos destinos bem conhecidos são _blank, _self, _parent e _top. htmlcodetutorial.com/linking/_A_TARGET.html
Tom Lianza
43

Aqueles de vocês que estão tentando usar o seguinte:

window.open('page.html', '_newtab');

deve realmente olhar para o método window.open.

Tudo o que você está fazendo é dizer ao navegador para abrir uma nova janela NOMEADA "_newtab" e carregar page.html nela. Cada nova página que você carregar será carregada nessa janela. No entanto, se um usuário tiver seu navegador configurado para abrir novas páginas em novas guias em vez de novas janelas, ele abrirá uma guia. Independentemente disso, está usando o mesmo nome para a janela ou guia.

Se desejar que páginas diferentes sejam abertas em janelas ou guias diferentes, você terá que alterar o NOME da nova janela / guia para algo diferente, como:

window.open('page2.html', '_newtab2');

Obviamente, o nome da nova janela / guia pode ser qualquer nome como página1, página2, página3, etc. em vez de _newtab2.

Bob Lindabury
fonte
3
conhece suas coisas. '_newtab' não é um nome reservado. '_blank' é uma coisa especial que abre outra janela / guia não especificada e sem nome - esta que você pode usar continuamente. '_newtab' não é especial, exceto que é o nome específico que você deu a uma nova guia (padrão) ou janela, que seu navegador atualiza com qualquer url que você enviar para ela.
BradChesney79
14

Cabe ao usuário decidir se deseja usar novas guias ou novas janelas, não é tarefa do desenvolvedor modificar esse comportamento. Eu não acho que você pode fazer isso.

Minha implicância - odeio quando os sites me forçam a abrir em uma nova janela / guia - sou perfeitamente capaz de tomar essa decisão sozinho. Particularmente quando eles fazem isso em javascript - isso é realmente inútil.

Sam Meldrum
fonte
1
+1 para Sam - a abertura de novas páginas em guias ou janelas é uma escolha específica do navegador (e do usuário). Em geral, odeio quando um site abre uma nova janela.
Richard Ev
Além disso: na definição "estrita", não há um atributo válido "alvo" para não incomodar o usuário. Experimente: validator.w3.org
guerda
4
Gosto de abrir lotes de guias em casa, então sou o usuário nesse caso. Apenas um lembrete de que existem exceções.
Mark Essel
7
Embora eu concorde que pode ser irritante quando os sites forçam ações, acho um pouco inútil afirmar que você não deve fazer algo sem considerar os motivos pelos quais alguém pode querer fazer isso. É comum que os sites abram coisas em novas guias, principalmente links de sites externos ou quando não é útil ter uma página ativa substituída por um novo conteúdo, portanto, não é um comportamento totalmente inesperado. Eu também sugeriria que esta não é realmente uma resposta à pergunta e teria sido mais adequada como um comentário para a postagem original.
andyface de
1
Eu discordo, supondo que um padrão para o usuário seja uma escolha de design por aplicativo da web, não por navegador. O navegador pode assinar um padrão onde o aplicativo não. Além disso, se os navegadores fornecem ao usuário uma maneira de substituir os padrões do aplicativo / padrões do navegador, então é o melhor dos dois mundos. Usuário> Aplicativo> Navegador.
Derek Litz
8

Você já experimentou como

var open_link = window.open('','_blank');
open_link.location="somepage.html";
Thurein Soe
fonte
Este navegador cruzado é compatível? Parece funcionar no IE8, preocupado com versões futuras ou outros navegadores.
n00b
Sim .. é compatível com cross-browser. Não tive problemas com isso até agora: D
Thurein Soe
5

Eu descobri no Chrome,

window.open('page.html','_newtab')

só funcionará uma vez.

Você pode usar:

window.open(ct.getNewHref(),'_newtab' + Math.floor(Math.random()*999999));

Para abrir várias novas guias.

Derek 朕 會 功夫
fonte
10
isso porque no Chrome, _newtab é apenas um nome e você está solicitando que ele abra a página na guia chamada "_newtab"
w00t
3

O código que uso com jQuery:

$("a.btn_external").click(function() {
    url_to_open = $(this).attr("href");
    window.open(url_to_open, '_blank');
    return false;
});

Isso é útil para distinguir entre os eventos de clique de um pai em um filho. Usando este método, você não dispara o evento de clique do pai.

lacroixca
fonte
8
Por que não usar simplesmente html antigo? <a href="page.html" target="_blank">foo</a>
pixelastic
1
@pixelastic "Ao usar este método, você não aciona o evento de clique do pai."
Michael Blackburn
3

Isso funciona 100%

window.open('http://www.google.com/','_newtab' + Date.now());

Kevin Muchwat
fonte
0

Se você quiser, pode usar este método, que é um pouco hacky, mas oferece a funcionalidade desejada:

jQuery('<a/>', {
    id: 'foo',
    href: 'http://google.com',
    title: 'Become a Googler',
    rel: 'external',
    text: 'Go to Google!',
    target:'_blank',
    style:'display:none;'
}).appendTo('#mySelector');

$('#foo').click()
Xenologia
fonte
você pode fornecer um jsfiddle?
Xenologia
-2

Isso pode funcionar se você puder chamar um arquivo em lote (eu uso php com XP sp2 e IE8 ... você pode tentar o IE7, não sei). Use o seguinte (ou semelhante) em seu arquivo .bat para abrir o Windows: Iniciar "" C: \ Progra ~ 1 \ Intern ~ 1 \ iexplore "http://www.site.com". Não há espaço entre as aspas e C: \ Progr ... etc. Em algum ponto, isso pode começar a abrir novas janelas (ou seja, target = "_ blank") em vez de novas guias, mas funciona até certo ponto; não amplamente testado. Para usar isso em um arquivo de lote normal (CMD.exe), você provavelmente precisa ter uma janela já aberta. Apenas compartilhando algo que encontrei. EDITADO para esclarecimentos.

river_mouse
fonte
-7
<a href="http://www.google.com/" target="_self">New Tab Example</a>

Funciona no IE7.

Saudações,

Glenn

Glenn Moore
fonte
8
Glenn, isso é o oposto do que o OP pediu. _self abrirá o documento na mesma janela ou quadro.
travega
Além disso, não é a maneira de abrir de forma programática. A surpresa é como ele ganhou +10 rep (+ 3 / -10) com esta resposta.
vusan