ie8 var w = window.open () - “Mensagem: Argumento inválido.”

113

Tenho um site que apresenta um problema apenas com o IE8:

O código é:

var w = window.open(urlstring, wname, wfeatures, 'false');

O erro é:

Mensagem: argumento inválido.
Linha: 419 Char: 5
Código: 0
URI: http: //HOSTNAME/js_context.js

Confirmei o número da linha do código (a "Linha" e o "URI" estão corretos) e sei que em versões posteriores do IE8 isso é considerado preciso.

Eu verifiquei todos os parâmetros de entrada na chamada, despejando alertas e todos parecem válidos.

Este problema não acontece no FF (provavelmente 3).

ATUALIZAR:

O problema parece estar em usar a atribuição do resultado de window.open () ao fazer "var w". Quando divido a linha em duas instruções, ela funciona no IE8.

ATUALIZAÇÃO2:

Baseado em:

http://javascript.crockford.com/code.html

Quando uma função deve ser chamada imediatamente, toda a expressão de chamada deve ser agrupada entre parênteses para que fique claro que o valor que está sendo produzido é o resultado da função e não a própria função.

Não é exatamente o que está acontecendo aqui, mas descobri que a aplicação do princípio resolveu o problema, no modo de compatibilidade do IE8.

var w = (window.open(urlstring, wname, wfeatures, false));
benc
fonte
Eu tive o mesmo problema, e a postagem de David é a melhor resposta. Obrigado por sua postagem e pela ajuda de David.
Ervin

Respostas:

251

Esta é uma postagem antiga, mas talvez ainda seja útil para alguém.

Eu tive a mesma mensagem de erro. No final, o problema era um nome inválido para o segundo argumento, ou seja, eu tinha uma linha como:

   window.open('/somefile.html', 'a window title', 'width=300');

O problema era 'um título de janela', pois não é válido. Funcionou bem com a seguinte linha:

   window.open('/somefile.html', '', 'width=300');

Na verdade, lendo cuidadosamente, percebi que a Microsoft não apóia um namesegundo argumento. Quando você olha a página de documentação oficial , vê que a Microsoft permite apenas os seguintes argumentos, se for usar esse argumento:

  • _em branco
  • _meios de comunicação
  • _parent
  • _procurar
  • _auto
  • _topo
Stefan
fonte
1
Acho que deixei de verificar a explicação do Mozilla sobre essa função, porque eu (asker) estava focado na quebra apenas do IE8.
benc
2
basta colocar: developer.mozilla.org/en/DOM/window.open -> "strWindowName não especifica o título da nova janela."
benc
33
Eu também tive esse erro no IE quando meu nome do Windows tinha um traço "-" no nome, como "my-windowname", a qualidade do IE nunca para de me surpreender.
Matt Palmerlee
1
A página de documentação do MSDN que você vinculou a afirma "Opcional. String que especifica o nome da janela.", Que me parece que você deve conseguir usar qualquer palavra-chave além dos argumentos listados acima.
James McMahon
3
Funciona no IE8 com nomes como ImageDisplay1234, mas não funciona com Image-Display-1234
boatcoder
78

O IE é exigente quanto ao argumento do nome da janela. Não gosta de espaços, travessões ou outros sinais de pontuação.

prlafferty
fonte
3
ou pontos ou travessões ou talvez outra pontuação
boatcoder
Obrigado, isso é útil
.. realmente
16

Quando você chama window.openno IE, o segundo argumento (nome da janela) deve ser uma das strings de destino predefinidas ou uma string, que tem a forma de um identificador válido em JavaScript.

Então, o que funciona no Firefox: "Job Directory 9463460", não funciona no Internet Exploder e deve ser substituído por: "Job_Directory_9463460" por exemplo (sem espaços, sem sinais de menos, sem pontos, deve ser um identificador válido) .

Sr. Napik
fonte
Obrigado .. isso me ajudou .. Eu tinha travessões (-) no nome da minha janela
delux247
8

o problema pode ser o wname, tente usar um dos mostrados no link acima, cito:

Opcional. String que especifica o nome da janela. Este nome é usado como o valor para o atributo TARGET em um formulário ou elemento âncora.

  • _blank O sURL é carregado em uma nova janela sem nome.
  • _media O url é carregado na Barra de Mídia do Microsoft Internet Explorer 6. Microsoft Windows XP Service Pack 2 (SP2) e posterior. Este recurso não é mais compatível. Por padrão, o url é carregado em uma nova janela ou guia do navegador.
  • _parent O sURL é carregado no pai do quadro atual. Se o quadro não tiver pai, este valor atua como o valor _self.
  • _search Desabilitada no Windows Internet Explorer 7, consulte Segurança e compatibilidade no Internet Explorer 7 para obter detalhes. Caso contrário, o sURL é aberto no painel de pesquisa do navegador no Internet Explorer 5 ou posterior.
  • _self O documento atual é substituído pelo sURL especificado.
  • _top sURL substitui qualquer conjunto de quadros que possa ser carregado. Se não houver conjuntos de quadros definidos, este valor atua como o valor _self.

se estiver usando outro wname, window.open não será executado ...

Joaquin
fonte
5
Essa última afirmação não está correta. Você também pode (a) especificar o nome de um quadro existente para carregar a página nesse quadro, (b) especificar o nome de uma "janela nomeada" existente para carregar a página lá, ou (c) especificar um nome que não não existe para criar uma "janela nomeada".
Ben Blank
Eu tive o mesmo problema, exceto que não estava definindo o resultado de window.open como uma variável. Tinha um título de página na variável wname. Alterou para '_blank' e corrigiu o problema.
Derek White
O que eu reduzi para não incluir - ou. Quando me livrei da pontuação Image-Display-1234 -> ImageDisplay1234, tudo estava bem.
boatcoder
1
Para apoiar o argumento de Ben, isso é o que o MSDN diz sobre o segundo parâmetro de window.open: "String que especifica o nome da janela. Este nome é usado como o valor para o atributo TARGET em um formulário ou elemento âncora." E aqui está o documento do atributo TARGET: msdn.microsoft.com/en-us/library/ms534659(v=vs.85).aspx . Diz claramente que o alvo pode ser uma string arbitrária e não apenas os valores listados nesta resposta.
niaher
5

Na verdade, um nome pode ser usado, mas não pode ter espaços, portanto, não window.open("../myPage","MyWindows",...)deve funcionar sem problemas ( window.open ).

Oliver
fonte
4

Eu também enfrento esse problema ao usar o seguinte código:

window.open('test.html','Window title','width=1200,height=800,scrollbars=yes');

mas quando eu excluo o espaço em branco do "Título da janela", o código abaixo está funcionando:

window.open('test.html','Windowtitle','width=1200,height=800,scrollbars=yes');
Raymond
fonte
Isso foi muito útil. Acabei substituindo meus espaços por _. IE estúpido!
MrGlass
2

Olá, usando o seguinte código está funcionando ...

onclick="window.open('privacy_policy.php','','width=1200,height=800,scrollbars=yes');

Anteriormente, eu entrei como

onclick="window.open('privacy_policy.php','Window title','width=1200,height=800,scrollbars=yes');

Significa que a Microsoft não permite que você insira o nome da janela, ela deve estar em branco na window.openfunção ...

Obrigado, Nilesh Pangul

Nilesh Pangul
fonte
Isso está incorreto, pode estar em branco, mas não precisa estar em branco.
Jimmy Bosse
2

Para mim, o problema era com um traço "-" no campo do nome da janela. Tirei os travessões e o IE não dá erro e de fato abre a janela.

Iohans
fonte
1

O que representa a posição quatro, aquela que tem 'falso' como valor? Isso não deveria ser falso (ou seja, sem aspas?). É possível que as versões anteriores do IE tornassem a string booleana, mas as mais recentes não.

x0n
fonte
Removi as aspas, mas não era a origem do problema para o IE8.
benc
1

As respostas aqui estão corretas porque o IE não suporta espaços ao definir o título em window.open (), nenhum parece oferecer uma solução alternativa.

Removi o título da minha chamada window.open (você pode usar null ou '') e, em seguida, adicionei o seguinte à página que estava sendo aberta:

<script>document.title = 'My new title';</script>

Não é ideal de forma alguma, mas isso permitirá que você defina o título como quiser em todos os navegadores.

MrGlass
fonte
0

Tente remover o último argumento. Fora isso, certifique-se de que urlstring, wname e wfeatures existem.

Macha
fonte
0

Eu descobri o mesmo problema e depois de ler a primeira resposta que supõe que o problema é causado pelo nome da janela, mudei-o: primeiro para '_blank', que funcionou bem (compatibilidade e visualização normal), depois para o valor anterior, apenas menos o espaço no valor :) - também funcionou. IMO, o problema (ou parte dele) é causado pela incapacidade do IE de usar um valor de string normal como wname. Espero que isso ajude se alguém tiver o mesmo problema.


fonte
0

Se você quiser usar o nome da nova janela etc postando um formulário nesta janela, a solução, que funciona no IE, FF, Chrome:

  var ret = window.open("", "_blank");
  ret.name = "NewFormName";

  var myForm = document.createElement("form");
  myForm.method="post";
  myForm.action = "xyz.php";
  myForm.target = "NewFormName";

      ...
Belinszki Imre
fonte
0

Parece que mesmo usando um nome de janela personalizado "válido" (não _blank, etc.) usando window.open para abrir uma nova janela, ainda há problemas. Funciona bem na primeira vez que você clica no link, mas se você clicar nele novamente (com a primeira janela aberta ainda aberta), você receberá uma depuração de script "Erro: interface não compatível".

Vince
fonte