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 中使用。

更新2:

基于:

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

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

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

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

14 回答 14

251

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

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

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

问题是“窗口标题”,因为它无效。它适用于以下行:

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

事实上,仔细阅读我意识到微软不支持name作为第二个论点。当您查看官方文档页面时,您会看到 Microsoft 只允许使用以下参数,如果使用该参数的话:

  • _空白的
  • _媒体
  • _父
  • _搜索
  • _自己
  • _最佳
于 2009-09-22T20:46:36.193 回答
78

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

于 2010-01-12T21:30:10.503 回答
16

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

那么在 Firefox 中有效:“Job Directory 9463460”,在 Internet Exploder中无效,必须替换为:例如“Job_Directory_9463460”(没有空格,没有减号,没有点,它必须是一个有效的标识符) .

于 2011-01-13T15:29:48.103 回答
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 将不会执行...

于 2009-05-29T21:22:11.383 回答
5

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

于 2011-06-11T20:48:45.147 回答
4

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

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

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

window.open('test.html','Windowtitle','width=1200,height=800,scrollbars=yes');
于 2012-12-05T10:31:11.643 回答
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

于 2011-06-20T13:11:32.227 回答
2

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

于 2011-11-08T04:47:14.367 回答
1

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

于 2009-04-02T17:30:03.507 回答
1

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

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

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

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

于 2013-01-23T18:46:17.053 回答
0

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

于 2009-04-02T17:29:38.017 回答
0

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

于 2009-08-05T15:54:27.827 回答
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";

      ...
于 2011-03-24T20:54:50.623 回答
0

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

于 2014-04-17T18:01:27.923 回答