ie8 var w = window.open() - “消息:参数无效。”

时间:2009-04-02 17:27:47

标签: javascript internet-explorer-8

我的网站只有IE8问题:

代码是:

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

错误是:

  

消息:参数无效。
  行:419   Char:5
  代码:0
  URI:http://HOSTNAME/js_context.js

我已确认代码的行号(“行”和“URI”是正确的),我理解在IE8的更高版本中,这被认为是准确的。

我通过转储警报检查了调用中的所有传入参数,它们看起来都是有效的。

这个问题不会发生在FF(可能是3)上。

更新:

问题似乎在于在执行“var w”时使用window.open()的结果。当我将该行分成两个语句时,它在IE8中工作。

UPDATE2:

基于:

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

  

调用函数时   立即,整个调用   表达应该用parens包裹   所以很明显这个价值   正在生产的结果是   功能而不是功能本身。

这不完全是这里发生的事情,但我发现在IE8的兼容模式中应用该原则解决了这个问题。

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

14 个答案:

答案 0 :(得分:251)

这是一个旧帖子,但可能对某人有用。

我有同样的错误消息。最后问题是第二个参数的名称无效,即我有一行如下:

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

问题是'窗口标题',因为它无效。它在以下行中运行良好:

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

事实上,仔细阅读我意识到微软不支持name作为第二个参数。当您查看official documentation page时,您会看到Microsoft仅允许以下参数,如果完全使用该参数:

  • _blank
  • _media
  • _parent
  • _search
  • _self
  • _top

答案 1 :(得分:78)

IE对窗口名称参数很挑剔。它不喜欢空格,破折号或其他标点符号。

答案 2 :(得分:16)

当您在IE中调用window.open时,第二个参数(窗口名称)必须是预定义的目标字符串之一或字符串,其形式为JavaScript中的有效标识符

那么在Firefox中有效:“作业目录9463460”,在Internet Exploder中工作,必须替换为:“Job_Directory_9463460”例如(没有空格,没有减号,没有点,它必须是有效的标识符。)

答案 3 :(得分:8)

问题可能是wname,尝试使用上面链接中显示的那个之一,我引用:

  

可选。指定的字符串   窗口的名称。使用此名称   作为TARGET属性的值   在表单或锚元素上。

     
      
  • _blank将sURL加载到一个未命名的新窗口中。
  •   
  • _media网址已加载到Microsoft Internet的媒体栏中   资源管理器6. Microsoft Windows XP   Service Pack 2(SP2)及更高版本。   此功能不再存在   支持的。默认情况下,网址是   加载到新的浏览器窗口或   标签。
  •   
  • _parent将sURL加载到当前帧的父级中。如果框架没有父框架,则此值将作为值_self。
  •   
  • _search在Windows Internet Explorer 7中禁用,有关详细信息,请参阅Internet Explorer 7中的安全性和兼容性。否则,将在Internet Explorer 5或更高版本的浏览器搜索窗格中打开sURL。
  •   
  • _self将当前文档替换为指定的sURL。
  •   
  • _top sURL替换可能加载的任何框架集。如果没有定义框架集,则此值将作为值_self。
  •   

如果使用另一个wname,window.open将不会执行...

答案 4 :(得分:5)

实际上可以使用名称但是它不能有空格 window.open("../myPage","MyWindows",...)应该没有问题(window.open)。

答案 5 :(得分:4)

我在使用以下代码时也遇到了这个问题:

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

但是当我删除“窗口标题”的空格时,以下代码正常运行:

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

答案 6 :(得分:2)

您可以使用以下代码进行工作......

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

之前我输入了

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

表示Microsoft不允许您在window.open函数...

中输入应该为空白的窗口名称

谢谢, Nilesh Pangul

答案 7 :(得分:2)

对我来说,问题是在窗口名称字段中使用短划线“ - ”。我删除了破折号,IE没有错误输出,实际上打开了窗口。

答案 8 :(得分:1)

第四个位置代表什么,“假”是一个值?这不应该是假的(即没有引号?)。早期版本的IE可能会将字符串强制转换为布尔值,但较新版本的则不会。

答案 9 :(得分:1)

这里的答案是正确的,因为IE在window.open()中设置标题时不支持空格,似乎没有提供解决方法。

我从window.open调用中删除了标题(你可以使用null或''),然后将以下内容添加到正在打开的页面中:

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

无论如何都不理想,但这样您就可以在所有浏览器中将标题设置为您想要的任何内容。

答案 10 :(得分:0)

尝试删除最后一个参数。除此之外,请确保存在url字符串,名称和功能。

答案 11 :(得分:0)

我发现了同样的问题,在阅读了第一个回答后认为问题是由窗口名称引起的,改了它:首先改为'_blank',哪个工作正常(兼容性和常规视图),然后是前一个值,只减去值:)中的空间 - 也工作。 IMO,问题(或其中的一部分)是由IE无法使用普通字符串值作为wname引起的。希望如果有人遇到同样的问题,这会有所帮助。

答案 12 :(得分:0)

如果你想使用新窗口的名称等发布表格到这个窗口,那么解决方案,在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";

      ...

答案 13 :(得分:0)

即使使用window.open使用“有效”自定义窗口名称(不是_blank等)来启动新窗口,仍然存在问题。第一次单击链接时它工作正常,但是如果再次单击它(第一个启动的窗口仍然处于运行状态),则会收到“错误:没有支持此类接口”脚本调试。