2

我这样调用 window.open() :

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

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

4

3 回答 3

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也一样好。很少需要窗口名称。

于 2010-11-08T20:50:53.810 回答
0

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

于 2010-11-08T20:26:55.637 回答
0

你真的需要一个窗口名称吗?从文档

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

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

于 2010-11-08T20:27:44.793 回答