我正在分析网站上的一些代码,发现了以下匿名函数,后跟 try catch 语句。我只是想知道 try catch 语句最后在做什么。它是否预加载 url,以便加载速度比匿名函数更快?另外,重点是它没有捕获任何错误。
(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) {}
最佳答案
引用link types MDN 上的列表中,“dns-prefetch”和“preconnect”被列为实验性的。它们不会出现在 HTML5 中链接元素的链接类型的“rel”值列表中。
因此,该代码在网络上使用实验技术,这可能会在某些浏览器中引发错误。为了防止停止应用程序并在控制台上记录异常,代码被放置在 try
block 中,并带有忽略错误的 catch
block 。
bsnPop.add
的调用中传递包含参数和回调的对象。在此阶段似乎并未创建弹出窗口。
try
block 中的下一个代码尝试通过提前请求 DNS 查找网站名称来加速对网站的访问,并在尝试检索内容之前打开与网站的连接。
代码被放置在 try
block 中,以适应浏览器在不支持请求的操作时抛出异常的可能性。该应用程序并不认为缺乏支持是一个错误,并且无论如何都想继续。
最终结果是,如果支持 dns-prefetch
或 preconnect
,浏览器就可以接受提示并执行操作。如果不支持它们,则忽略生成的任何错误,代码将在下一条语句处继续 - 稍后连接到网站将必须以正常速度继续。
关于JavaScript try catch 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41858917/