IE8 window.open名称 - 不喜欢JavaScript编码?

时间:2010-11-08 20:16:19

标签: javascript .net internet-explorer internet-explorer-8 antixsslibrary

我正在调用window.open():

window.open('blank.html', 'New_Window\x3a_Jamie', 'width=800,height=800');

我在代码中所做的是获取窗口的名称,JavaScript使用Microsoft Web Protection library对其进行编码。我也用下划线替换空格,因为我读到IE不喜欢窗口名称中的空格。仅供参考,原始字符串为“New Window:Jamie”,看起来“:”被编码为“\ x3a”。该窗口在FireFox中打开就好了,但窗口在IE8中没有打开。 IE8只是不喜欢这种编码,还是字符还是什么?是否有关于IE8窗口名称中可出现哪些字符的规则?

3 个答案:

答案 0 :(得分:2)

  

是否有关于IE8窗口名称中可出现哪些字符的规则?

是。虽然它似乎没有记录,但IE总是要求窗口名称由字母数字和下划线组成。无论是否从编码的字符串文字中读取,都不会接受冒号。

如果您确实需要将任意字符串映射到唯一的名称安全版本,则必须执行将每个非字母数字字符编码为转义序列的操作,例如:

function encodeToName(s) {
    return s.replace(/[^A-Za-z0-9]/g, function(match) {
        var c= match[0].charCodeAt(0).toString(16);
        return '_'+(new Array(5-c.length).join('0'))+c;
    });
}

alert(encodeToName('New Window: Jamie'));
// 'New_0020Window_003A_0020Jamie'

我同意卡萨布兰卡,但你似乎不太可能真的需要这样做。用户永远不会看到窗口名称,因此w1同样出色。根本不需要窗口名称。

答案 1 :(得分:0)

认为它希望窗口名称能够作为标识符。因此,“New_Window_Jamie”可能会没问题。

答案 2 :(得分:0)

你真的需要一个窗口名称吗?来自the docs

  

当指定<a>元素或<form>的目标属性时,此类字符串可用作链接和表单的目标。此字符串参数不应包含任何空格。

这是指定名称的唯一用法,虽然除了“无空格”之外我没有看到任何限制,但坚持使用字母,数字和下划线是安全的。