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

Eu tenho um site que tem um problema somente do IE8:

O código é:

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

O erro é:

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

Eu confirmei o número da linha do código (a “Linha” e “URI” estão corretos), e eu entendo em versões posteriores do IE8, isso é considerado preciso.

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

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

ATUALIZAR:

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

UPDATE2:

Baseado em:

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

Quando uma function deve ser invocada imediatamente, toda a expressão de invocação deve ser envolvida em parens para que fique claro que o valor que está sendo produzido é o resultado da function e não da própria function.

Isso não é exatamente o que está acontecendo aqui, mas descobri que aplicar o princípio resolveu o problema, no modo de compatibilidade do IE8.

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

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 atentamente, percebi que a Microsoft não suporta um name como segundo argumento. Quando você olha para a página de documentação oficial , você vê que a Microsoft apenas permite os seguintes argumentos, se usar esse argumento em todos os:

  • _em branco
  • _meios de comunicação
  • _parent
  • _pesquisa
  • _auto
  • _topo

IE é exigente sobre o argumento do nome da janela. Não gosta de espaços, traços ou outras pontuações.

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

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

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

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

  • _blank O sURL é carregado em uma nova janela sem nome.
  • _media O URL é carregado na barra de mídia no Microsoft Internet Explorer 6. Microsoft Windows XP Service Pack 2 (SP2) e posterior. Este recurso não é mais suportado. 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, esse valor atuará como o valor _self.
  • _search Desativado 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 todos os conjuntos de frameworks que podem ser carregados. Se não houver conjuntos de frameworks definidos, esse valor atuará como o valor _self.

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

Na verdade, um nome pode ser usado, no entanto, ele não pode ter espaços, então window.open("../myPage","MyWindows",...) deve funcionar sem nenhum problema ( window.open ).

Eu também conheço esse problema enquanto usava o seguinte código:

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

mas quando apago 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'); 

Oi usando o seguinte código seu trabalho …

 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 Microsoft não permite que você digite o nome da janela deve estar em branco na function window.open

Obrigado, Nilesh Pangul

Para mim, o problema era com um traço “-” no campo do nome da janela. Eu removi os traços e o IE não cometeu erros e, de fato, abre a janela.

O que a posição quatro representa, aquela que tem “falso” como um valor? Isso não deveria ser falso (ou seja, sem aspas?). É possível que versões anteriores do IE coagulem a string para um booleano, mas as mais novas não.

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

Eu removi o título da minha chamada window.open (você pode usar null ou ”), e ele adicionou o seguinte à página sendo aberta:

  

Não é ideal por qualquer meio, mas isso permitirá que você defina o título para o que quiser em todos os navegadores.

Tente remover o último argumento. Além disso, certifique-se de que urlstring, wname e wfeatures existam.

Eu descobri o mesmo problema e depois de ler a primeira resposta que supostamente o problema é causado pelo nome da janela, alterei: primeiro para ‘_blank’, que funcionou bem (compatibilidade e visão normal), então para o valor anterior, apenas menos o espaço no valor 🙂 – também funcionou. IMO, o problema (ou parte dele) é causado pelo IE ser incapaz de usar um valor de string normal como o wname. Espero que isso ajude se alguém tiver o mesmo problema.

Se você quiser usar o nome da nova janela etc postando um formulário para esta janela, então 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"; ... 

Parece que, mesmo usando um nome de janela personalizado “válido” (não _blank, etc.) usando window.open para iniciar uma nova janela, ainda há problemas. Ele funciona bem na primeira vez que você clica no link, mas se você clicar nele novamente (com a primeira janela ativada ainda para cima), você receberá uma debugging de script “Erro: sem essa interface com suporte”.