Javascript的"window.open"代码在Internet Explorer 7或8中无法工作

9

我在我的网站上使用这段jQuery / Javascript代码来打开一个弹出窗口:

$('#change_photo_link').click(function(){
    $id = $('#id').attr('value');

    window.open("photo.upload.php?id=" + $id,"Upload Photo",
    "menubar=no,width=430,height=100,toolbar=no");
});

这段代码可以在Firefox和Chrome上运行,但无法在IE7或IE8上运行(未测试IE6)。 IE会在window.open这一行弹出错误。为什么?IE给出的错误信息是“无效参数”。

2个回答

33

问题出在第二个参数的空格上。如果您使用"UploadPhoto"而不是"Upload Photo",它将正常工作:

$('#change_photo_link').click(function(){
    $id = $('#id').attr('value');

    window.open("photo.upload.php?id=" + $id,"UploadPhoto",
    "menubar=no,width=430,height=100,toolbar=no");
});

我似乎找不到任何官方原因解释为什么在window.open()windowName参数中加入空格会导致错误,但很可能只是一个实现细节。 windowName用作内部引用,并且可以用作锚点或表单的目标属性值,所以我猜IE无法在内部处理它。 Gecko / Firefox的参考文档指出,该参数不应包含空格,但是如果包含空格,则当前版本的Gecko显然没有问题。


zombat:是啊,这有什么问题吗?不是窗口标题吗...我只是觉得因为这个原因它必须是toString()。 - Hogan
2
很可能是因为第二个参数是窗口的名称,而且不允许包含空格。 - K Prime
2
@Hogan:这是一个内部的“名称”,而不是“标题”。 - Lightness Races in Orbit
2
请注意,如果第二个参数包含“-”,IE也会失败。例如,“twitter-window”将失败。我非常喜欢IE! - moey

9

windowName参数只能包含字母数字和下划线(即[A-Z0-9_])。

你必须进行更改。

window.open("photo.upload.php?id=" + $id,"Upload Photo",
"menubar=no,width=430,height=100,toolbar=no");

to

window.open("photo.upload.php?id=" + $id,"Upload_Photo",
"menubar=no,width=430,height=100,toolbar=no");

或者使用其他没有空格的名称。

请查看https://developer.mozilla.org/En/DOM/Window.open


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接