window.open在IE7-8-9b中抛出无效参数

时间:2011-01-30 00:27:24

标签: javascript internet-explorer javascript-events

我对javascript的了解不足以弄清楚为什么这个脚本中以“window.open ...”开头的行在IE7-8-9b中抛出了无效的参数错误。在Firefox和Webkit中运行良好。

(该脚本在html链接中带有onclick="share.fb()",并弹出一个新的浏览器窗口,在FB和Twitter上分享。)

var share = {
    fb:function(title,url) {
    this.share('http://www.facebook.com/sharer.php?u=##URL##&t=##TITLE##',title,url);
    },
    tw:function(title,url) {
    this.share('http://twitter.com/home?status=##URL##+##TITLE##',title,url);
    },
    share:function(tpl,title,url) {
    if(!url) url = encodeURIComponent(window.location);
    if(!title) title = encodeURIComponent(document.title);

    tpl = tpl.replace("##URL##",url);
    tpl = tpl.replace("##TITLE##",title);

    window.open(tpl,"sharewindow"+tpl.substr(6,15),"width=640,height=480");
    }
    };

1 个答案:

答案 0 :(得分:33)

IE不允许窗口名称中的空格和其他特殊字符(第二个参数)。在作为参数传递之前,您需要删除它们。

替换

"sharewindow"+tpl.substr(6,15)

通过

"sharewindow"+tpl.substr(6,15).replace(/\W*/g, '')

这样你最终得到了

window.open(tpl,"sharewindow"+tpl.substr(6,15).replace(/\W*/g, ''),"width=640,height=480");

(这基本上是一个正则表达式的替代品,上面写着“无需替换每个非语言字符序列”)

现场演示here(必要时配置你的弹出窗口拦截器)