奇怪的窗户,打开的行为

Weird window.open behaviour

本文关键字:窗户      更新时间:2023-09-26

此代码在Chrome上的行为很有趣(此处为fiddle):

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

首先,尽管代码被包装在try-catch中,但还是抛出了一个错误:

无法打开URL为"%36:%04-="的窗口。

其次,在URL中插入无关字符,即%3%04

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

try/catch没有任何效果,因为它不是例外。这只是一条打印到控制台的错误消息。你可以证明:

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

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

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

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

第二个:%04是由JSFiddle插入的不可见字符。%36是Chrome在为URL方案编码时转换为%36的数字6。更新的小提琴没有%04