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


113

我有一个仅具有IE8问题的网站:

代码是:

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

错误是:

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

我已经确认了代码的行号(“ Line”和“ URI”是正确的),并且我知道在IE8的更高版本中,这被认为是准确的。

我已经通过转储警报检查了呼叫中的所有传入参数,它们看起来都有效。

FF(可能3)不会发生此问题。

更新:

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

UPDATE2:

基于:

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

当立即调用一个函数时,应将整个调用表达式包装在括号中,以便清楚地知道所产生的值是函数的结果,而不是函数本身。

这并不完全是这里发生的事情,但是我发现应用该原理可以解决IE8的兼容模式中的问题。

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

我遇到了同样的问题,David的帖子是最好的答案。感谢您的帖子以及David的帮助。
Ervin 2010年

Answers:


251

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

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

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

问题是“窗口标题”,因为它无效。在以下行中工作正常:

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

实际上,仔细阅读后,我意识到Microsoft不支持name第二种说法。查看官方文档页面时,您会看到Microsoft仅允许以下参数,如果完全使用该参数,则:

  • _空白
  • _媒体
  • _父母
  • _搜索
  • _自
  • _最佳

1
我想我已经忽略了对Mozilla关于此功能的解释,因为我(问问者)只专注于IE8损坏。
benc 2010年

2
简而言之:developer.mozilla.org/en/DOM/window.open- >“ strWindowName未指定新窗口的标题。”
benc 2010年

33
当我的Windows名称的名称中带有短划线“-”(例如“ my-windowname”)时,我也在IE中出现此错误,IE的质量永不停止。
马特·帕默里

1
您链接到的MSDN文档页面上的状态为“可选。指定窗口名称的字符串。”,这听起来像是您应该能够使用上面列出的参数之外的任何关键字。
詹姆斯·麦克马洪

3
它可在IE8中使用ImageDisplay1234之类的名称,但不适用于Image-Display-1234
boatcoder

78

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


3
或点或破折号或其他标点符号
boatcoder

谢谢你的帮助。.真的很讨厌IE 6-10
Dilip Godhani

16

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

那么,在Firefox作品:“作业目录9463460”,并没有在互联网爆工作,并已被替换为:“Job_Directory_9463460”为例(没有空格,没有减号,没有点,它必须是一个有效的标识符) 。


谢谢..这帮助了我..我在窗口名称中
带有

8

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

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

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

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


5
最后的陈述是不正确的。您还可以(a)指定现有框架的名称以将该页面加载到该框架中;(b)指定现有的“命名窗口”的名称以将该页面加载到该框架中;或(c)指定一个不包含该名称的名称。存在以创建“命名窗口”。
本·布兰克

除了没有将window.open的结果设置为变量外,我遇到了同样的问题。在wname变量中具有页面标题。将其更改为“ _blank”并解决了该问题。
德里克·怀特

我将范围缩小到不包含-或。当我删除标点符号Image-Display-1234-> ImageDisplay1234时,一切都很好。
boatcoder 2012年

1
为了支持Ben的论点,这就是MSDN关于window.open的第二个参数的说法:“指定窗口名称的字符串。该名称用作表单或锚点元素上TARGET属性的值。” 这是TARGET属性文档:msdn.microsoft.com/en-us/library/ms534659(v=vs.85).aspx。它清楚地表明目标可以是任意字符串,而不仅仅是此答案中列出的值。
niaher

5

实际上可以使用名称,但是名称不能有空格,因此 window.open("../myPage","MyWindows",...)应该可以正常使用(window.open)。


4

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

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

但是,当我删除“窗口标题”空白时,以下代码正在工作:

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

这非常有帮助。最终用_替换了我的空格。愚蠢的IE!
MrGlass

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');

表示微软不允许您输入窗口名称,其window.open功能应为空白...

谢谢,Nilesh Pangul


这是不正确的,可以为空,但不必为空。
吉米·波斯

2

对我来说,问题在于窗口名称字段中的破折号“-”。我删除了破折号,IE并没有出错,实际上打开了窗口。


1

位置四代表什么,以“ false”为值的位置?那不应该是错误的(即不加引号吗?)。IE的早期版本可能会将字符串强制转换为布尔值,而较新的版本则不会。


我删除了引号,但这不是IE8问题的根源。
09年

1

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

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

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

无论如何都不理想,但这将使您可以将标题设置为所有浏览器中所需的名称。


0

尝试删除最后一个参数。除此之外,请确保存在urlstring,wname和wfeatures。


0

我发现了相同的问题,并在阅读了第一个答案(假定该问题是由窗口名称引起的)之后,将其更改为:首先更改为'_blank',该方法工作正常(兼顾兼容性和常规视图),然后更改为先前的值,仅减了值中的空格:)-也有效。IMO,问题(或部分原因)是由于IE无法将常规字符串值用作wname引起的。希望这对任何遇到相同问题的人都有帮助。


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";

      ...

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.