代码之家  ›  专栏  ›  技术社区  ›  Brandon Montgomery

ie8 window.open name-不喜欢javascript编码?

  •  2
  • Brandon Montgomery  · 技术社区  · 14 年前

    我这样调用window.open():

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

    我在代码中所做的是获取窗口的名称,并使用 Microsoft Web Protection library . 我还用下划线替换了空格,因为我知道IE不喜欢窗口名称中的空格。仅供参考,原始字符串是“new window:jamie”,它看起来像“:”被编码为“\x3a”。这个窗口在Firefox中打开很好,但在IE8中没有打开。IE8是不是不喜欢这种编码,字符还是什么?IE8的窗口名称中可以显示哪些字符,是否有规则?

    3 回复  |  直到 14 年前
        1
  •  2
  •   bobince    14 年前

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

        2
  •  0
  •   Pointy    14 年前

    认为 它希望窗口名可以作为标识符使用。因此,“新窗口”可能是好的。

        3
  •  0
  •   casablanca    14 年前

    你真的需要一个窗口名吗?从 the docs :

    当对象的目标属性 <a> 元素或的 <form> 已指定。此字符串参数不应包含任何空格。

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