我正在分析网站上的一些代码,我遇到了以下匿名函数,后跟try catch语句。我只是想知道try catch语句到底在做什么。它是否预先加载了网址,以便加载更快,然后匿名函数会更快?此外,重点是它没有发现任何错误。
(function() {
var fired = false;
bsnPop.add("http://www.someurl.com", {
under: !noPopunder,
newTab: false,
forceUnder: true,
shouldFire: function() {
return !fired;
},
cookieExpires: -1,
afterOpen: function(url) {
createCookie();
fired = true;
doSecondPop();
}
});
})();
try {
var hint = document.createElement("link");
hint.rel = "dns-prefetch";
hint.href = "http://www.someurl.com";
document.head.appendChild(hint);
var hint = document.createElement("link");
hint.rel = "preconnect";
hint.href = "http://www.someurl.com";
document.head.appendChild(hint);
} catch (e) {}
答案 0 :(得分:3)
参考MDN上的link types列表,“dns-prefetch”和“preconnect”被列为实验性的。它们不会出现在HTML5
中链接元素的链接类型的“rel”值列表中因此代码在网络上使用实验技术,这可能会在某些浏览器中引发错误。为防止停止应用程序并在控制台上记录异常,代码将放在try
块中,并带有忽略错误的catch
块。
<小时/> 在回答问题细节时,调用IIFE中的匿名函数,并在调用
bsnPop.add
时传递包含参数和回调的对象。在此阶段似乎没有创建弹出窗口。
try
块中的下一个代码尝试提前通过请求DNS查找网站名称来加快对网站的访问,并在尝试检索内容之前打开与该网站的连接。
代码放在try
块中,以适应浏览器在不支持请求的操作时抛出异常的可能性。该应用程序不认为缺少支持错误,并希望继续。
最终结果是,如果支持dns-prefetch
或preconnect
,浏览器可以获取提示并执行操作。如果不支持它们,则忽略生成的任何错误,并在下一个语句中继续执行代码 - 稍后连接到网站将必须以正常速度继续。