JavaScript aberto em uma nova janela, não na guia

364

Eu tenho uma caixa de seleção que chama window.open(url)quando um item é selecionado. O Firefox abrirá a página em uma nova guia por padrão. No entanto, gostaria que a página fosse aberta em uma nova janela, não em uma nova guia.

Como posso fazer isso?

Adão
fonte
3
veja o exemplo em " jsfiddle.net/HLbLu
Michael Freidgeim 24/02
Você pode usar github.com/reduardo7/xpopup
Eduardo Cuomo

Respostas:

456

Atribua à janela um parâmetro 'specs' com largura / altura. Veja aqui todas as opções possíveis.

window.open(url, windowName, "height=200,width=200");

Quando você especifica uma largura / altura, ela será aberta em uma nova janela em vez de em uma guia.

DNS
fonte
5
Boa dica. Eu acho que o Opera ainda abrirá isso em uma guia :).
Kevin Tighe
7
Trabalhando no IE6, FF 3.6, Chrome 9.0
James Westgate
3
Não funciona mais no FF 11.0, veja minha pergunta ! @James
TMS
14
Não funciona nos navegadores de hoje. Por padrão, todos eles abrem uma nova janela em uma nova guia da janela atual. Também depende das opções do navegador. Você não pode controlá-lo usando JavaScript.
Pavel Hodek
3
NÃO é esse o fato de você colocar "height = 200, width = 200" que executa a abertura em uma nova janela. Isto é simplesmente o fato de colocar um parâmetro extra (localização, status, etc ... isso não importa) #
Peter Peter
110

Você não precisa usar a altura, apenas certifique-se de usar _blank. Sem ela, ela será aberta em uma nova guia.

Para uma janela vazia:

window.open('', '_blank', 'toolbar=0,location=0,menubar=0');

Para um URL específico:

window.open('http://www.google.com', '_blank', 'toolbar=0,location=0,menubar=0');
nwbrad
fonte
3
Mas e se eu quiser dar um nome também?
Aditi
Pelo menos no Chrome, location=0é necessário quando o JS é chamado de um botão ou elemento âncora.
Ohad Schneider
funcionou perfeitamente. teve que incluir location = 0 também no firefox.
Rick James
@nwbrad você tem certeza da parte '_blank' porque, até onde eu sei, '_blank' é o valor padrão quando não especificamos nenhum outro valor. No seu caso, abrir uma nova janela em vez de uma nova guia tem a ver com o fornecimento do terceiro parâmetro para a função window.open. No seu caso, é 'barra de ferramentas = 0, localização = 0, barra de menu = 0'. Você pode verificá-lo omitindo este terceiro parâmetro e deixando '_blank' lá como o segundo parâmetro.
user1451111
Funciona perfeitamente em navegadores modernos como Firefox 76 e Internet Explorer 11. A dica é adicionar location=0os parâmetros. Eu também sugeriria nomear a janela em vez de usar o _blankdestino, para que a mesma janela seja usada novamente se o usuário clicar várias vezes no elemento que abre o pop-up e encadeando-o focus()para que um pop-up aberto já tenha o foco:window.open('http://stackoverflow.com', 'Stack_Overflow','location=0').focus();
OuzoPower
82

Posso estar errado, mas, pelo que entendi, isso é controlado pelas preferências do navegador do usuário e não acredito que isso possa ser substituído.

Jordan S. Jones
fonte
11
Você está certo, o usuário pode definir o "about: config" preferência "browser.tabs.opentabfor.windowopen" como true, mas essa é uma configuração global e não quero alterar o comportamento global dos navegadores de nossos usuários;)
adam
45
Eu disse que tenho um código que funciona. Eu digitei isso no console do firebug: window.open ("", "cocô", "height = 200, width = 200, modal = yes, alwaysRaised = yes"); e adivinha??? funciona!!!!!!
24
Sim, funciona, mas isso parece um pouco complicado. O Firefox é escrito de tal maneira que abrir uma nova janela vs guia é uma preferência do navegador, não uma preferência de javascript. Portanto, é possível que sua sugestão não funcione da mesma forma em uma versão posterior do firefox. Prefiro não confiar em um hack.
adam
2
E para ser claro, não quero dizer que seja um hack de javascript. Adicionar altura e largura da janela é claramente um recurso do método js window.open ( w3schools.com/HTMLDOM/met_win_open.asp ). Quero dizer hackear no sentido de manipular o comportamento pretendido do firefox.
adam
2
Eu realmente não chamaria isso de hack, por si só. Você está apenas comprometendo-se com o comportamento que realmente gostaria de ter e implementando isso.
Matchu 9/12/09
15

Tentar:

window.open("", [window name], "height=XXX,width=XXX,modal=yes,alwaysRaised=yes");

Eu tenho algum código que faz o que você diz, mas há muitos parâmetros nele. Eu acho que esse é o mínimo, deixe-me saber se não funcionar, vou postar o resto.

arulmr
fonte
Isso funciona no FF 31 e no Chrome 36 usando apenas a opção "modal = yes". Todas as opções especificadas também funcionam. Também tenho "Abrir novas janelas em novas guias" marcado nas minhas preferências de FF. Sem opções abertas, as janelas são abertas em uma nova guia.
Clint Pachl
Depois de mais alguns testes, parece que quase todos os parâmetros - desde que haja pelo menos um - abrirão uma nova janela em vez de uma guia. Por exemplo, apenas "top = 0" funciona até no FF 31 e no Chrome 36. Isso é no OpenBSD usando o gerenciador de janelas cwm. Portanto, os resultados podem variar.
Clint Pachl
Posso saber, o que é [nome da janela]?
pcs
10

OK, depois de fazer muitos testes, aqui está minha conclusão:

Quando você executa:

     window.open('www.yourdomain.tld','_blank');
     window.open('www.yourdomain.tld','myWindow');

ou o que você colocar no campo de destino, isso não mudará nada: a nova página será aberta em uma nova guia (portanto, depende da preferência do usuário)

Se você deseja que a página seja aberta em uma nova janela "real", você deve colocar um parâmetro extra. Gostar:

window.open('www.yourdomain.tld', 'mywindow','location=1,status=1,scrollbars=1, resizable=1, directories=1, toolbar=1, titlebar=1');

Após o teste, parece que o parâmetro extra que você usa não importa: esse não é o fato de você colocar "esse parâmetro" ou "esse outro" que cria a nova "janela real", mas o fato de haver um novo parâmetro (s )

Mas algo está confuso e pode explicar muitas respostas erradas:

Este:

 win1 = window.open('myurl1', 'ID_WIN');
 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');

E isto:

 win2 = window.open('myurl2', 'ID_WIN', 'location=1,status=1,scrollbars=1');
 win1 = window.open('myurl1', 'ID_WIN');

NÃO dará o mesmo resultado.

No primeiro caso, quando você abre uma página sem parâmetro extra, ela será aberta em uma nova guia . E, nesse caso, a segunda chamada também será aberta nesta guia por causa do nome que você der.

No segundo caso, como sua primeira chamada é feita com um parâmetro extra, a página será aberta em uma nova " janela real ". E, nesse caso, mesmo que a segunda chamada seja feita sem o parâmetro extra, ela também será aberta neste novo " janela real " ... mas na mesma guia!

Isso significa que a primeira chamada é importante, pois decidiu onde colocar a página.

Pedro
fonte
Esta resposta deve ter muita ++++ #
3055 Mitch MitchellDuyn
9

Você não deveria precisar. Permita que o usuário tenha as preferências que desejar.

O Firefox faz isso por padrão porque abrir uma página em uma nova janela é irritante e uma página nunca deve ser permitida, se não for o que o usuário deseja. (O Firefox permite abrir abas em uma nova janela, se você a definir dessa maneira).

CookieOfFortune
fonte
31
Você está tão errado. e pela maneira, dizendo "você não deve precisar" não é apropriado, especialmente se for algo que o chefe quer
8
Vamos tentar manter os comentários práticos e úteis. Podemos discordar sem ser um insulto.
adam
17
@ theman_on_vista: Convencer o seu chefe é sua responsabilidade. Sua empresa concedeu a você a responsabilidade de resolver problemas de design. Isso inclui apontar idéias de design erradas.
EFRAIM
2
Tão verdade. A tela pertence ao usuário, e mais ninguém.
Christopher Creutzig 22/09/10
12
É do domínio do designer escolher pop-up ou guia. Embora eu seja um usuário que sempre prefere guias, reconheço que, às vezes, o design realmente chama um pop-up ou realmente chama uma guia. Deve ser do domínio do programador tornar isso possível. Deixando de lado as diferenças filosóficas, esse tipo de comentário é totalmente inapropriado para um site de referência de programação. E, neste caso, não é um "eu deveria?" questão. É "como eu faço?"
Jbenet
9

Você pode tentar a seguinte função:

<script type="text/javascript">
function open(url)
{
  var popup = window.open(url, "_blank", "width=200, height=200") ;
  popup.location = URL;
}
</script>

O código HTML para execução:

<a href="#" onclick="open('http://www.google.com')">google search</a>
jgray
fonte
2
Qual é o propósito do popup.location = URL;? A window.open()chamada deve abri-la na URL apropriada e, no seu exemplo de código, URLnão está definida, portanto, ela retornará ao objeto de URL experimental (e não oferece suporte amplo) . Enquanto usá-lo para isso é discutível, estou curioso para saber quais são as motivações para seu uso aqui.
ken
Resposta sólida e me ensinou como tornar o local não editável. obrigado
VirtualProdigy
6

A chave são os parâmetros:

Se você fornecer os Parâmetros [Height = "", Width = ""], ele será aberto em novas janelas.

Se você NÃO fornecer parâmetros, ele será aberto em uma nova guia.

Testado no Chrome e Firefox

MuniR
fonte
11
newwin = window.open ('test.aspx', '', ''); testado no Chrome: 26
MuniR
5

Curiosamente, descobri que se você passar em um local vazio string (em oposição a uma string nula ou uma lista de propriedades) para o terceiro atributo de window.open, ela abriria em uma nova guia para Chrome, Firefox e IE. Se ausente, o comportamento era diferente.

Então, esta é minha nova ligação:

 window.open(url, windowName, '');
Tom Lianza
fonte
O pôster original não está tentando abrir pop-ups em uma nova janela? Além disso, no IE 11, o snippet de código que você forneceu abrirá uma nova janela ou guia com base nas preferências do navegador do usuário.
4

tente esse método .....

function popitup(url) {
       //alert(url);
       newwindow=window.open("http://www.zeeshanakhter.com","_blank","toolbar=yes,scrollbars=yes, resizable=yes, top=500, left=500, width=400, height=400");
       newwindow.moveTo(350,150);
   if (window.focus) 
          {
             newwindow.focus()
          }
   return false;
  }
Zeeshan Akhter
fonte
3

Para mim, a solução era ter

"location=0"

no terceiro parâmetro. Testado no FF / Chrome mais recente e em uma versão antiga do IE11

A chamada de método completo que uso está abaixo (como eu gosto de usar uma largura variável):

window.open(url, "window" + id, 'toolbar=0,location=0,scrollbars=1,statusbar=1,menubar=0,resizable=1,width=' + width + ',height=800,left=100,top=50');
DAustin
fonte
2

Eu apenas tentei isso com o IE (11) e o Chrome (54.0.2794.1 canary SyzyASan):

window.open(url, "_blank", "x=y")

... e abriu em uma nova janela.

O que significa que Clint pachl acertou quando disse que fornecer qualquer parâmetro faria com que a nova janela fosse aberta.

- e aparentemente não precisa ser um parâmetro legítimo!

(YMMV - como eu disse, eu só testei em dois lugares ... e a próxima atualização pode invalidar os resultados, de qualquer maneira)

ETA: Acabei de notar, porém - no IE, a janela não tem decoração.

theGleep
fonte
1

Respondeu aqui . Mas publicá-lo novamente para referência.

window.open()não será aberto 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.

<a class="link">Link</a>
<script  type="text/javascript">
     $("a.link").on("click",function(){
         window.open('www.yourdomain.com','_blank');
     });
</script>

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 o async : falseconjunto de opções.

Venkat Kotra
fonte
1

Eu acho que não é problema de propriedades de destino html, mas você desmarcou a opção "abrir janelas do nw em uma nova guia em vez" na opção "guia" no menu "opções" do firefox. verifique e tente novamente.

insira a descrição da imagem aqui

shihab mm
fonte
0

Eu tive essa mesma pergunta, mas encontrei uma solução relativamente simples para ela.

Em JavaScript, eu estava verificando para window.opener !=null;determinar se a janela era pop-up. Se você estiver usando algum código de detecção semelhante para determinar se a janela em que o site está sendo renderizado é uma janela pop-up, é possível "desabilitá-lo" facilmente quando você deseja abrir uma "nova" janela usando o JavaScript da nova janela.

Basta colocar no topo da página que você deseja sempre ser uma "nova" janela.

<script type="text/javascript">
    window.opener=null;
</script>

Eu uso isso na página de logon do meu site para que os usuários não obtenham comportamento pop-up se usarem uma janela pop-up para navegar até o meu site.

Você pode até criar uma página de redirecionamento simples que faça isso e depois mover para o URL que você forneceu. Algo como,

JavaScript na página principal:

window.open("MyRedirect.html?URL="+URL, "_blank");

E então, usando um pouco de javascript a partir daqui, você pode obter o URL e redirecionar para ele.

JavaScript na página de redirecionamento:

 <script type="text/javascript">
        window.opener=null;

    function getSearchParameters() {
          var prmstr = window.location.search.substr(1);
          return prmstr != null && prmstr != "" ? transformToAssocArray(prmstr) : {};
    }

    function transformToAssocArray( prmstr ) {
        var params = {};
        var prmarr = prmstr.split("&");
        for ( var i = 0; i < prmarr.length; i++) {
            var tmparr = prmarr[i].split("=");
            params[tmparr[0]] = tmparr[1];
        }
        return params;
    }

    var params = getSearchParameters();
    window.location = params.URL;
    </script>
Dan
fonte