奇怪的window.open行为

时间:2012-09-01 15:01:20

标签: javascript google-chrome

这段代码在Chrome上很有趣(小提琴here):

try {
   open('6:-=');
} catch(e) {}

首先,尽管代码被包装在try-catch中,但仍会抛出错误:

  

无法打开包含无效网址'%36:%04 - ='。

的窗口

其次,在网址中插入了无关的字符,即%3%04

为什么try-catch不拦截错误,为什么URL有这些额外的字符?

3 个答案:

答案 0 :(得分:5)

try / catch没有任何效果,因为它不是例外。它只是打印到控制台的error message。你可以证明:

open('6:-=');
console.log(1);  // logged as usual

基本上,它就像console.error()也不会抛出异常,但它会向控制台输出类似异常的消息。

答案 1 :(得分:3)

您的小提琴包含一个不可打印的字符,在冒号后面的6:-=字符串中包含ASCII代码4,在显示的错误中将其编码为%04。此外,提供的网址的6:部分被解释为网址方案,不能以数字开头,因此显然Chrome网址引用6也为%36,尽管这种行为不是由RFC规定。

答案 2 :(得分:2)

首先:正如pimvdb所说,这是因为它实际上并不是例外。

第二:%04是由JSFiddle插入的不可见字符。 %36是Chrome为URL方案编码时转换为%36的数字6。 Updated fiddle without %04