Javascript尝试catch语句

时间:2017-01-25 18:27:31

标签: javascript html

我正在分析网站上的一些代码,我遇到了以下匿名函数,后跟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) {}

1 个答案:

答案 0 :(得分:3)

参考MDN上的link types列表,“dns-prefetch”和“preconnect”被列为实验性的。它们不会出现在HTML5

中链接元素的链接类型的“rel”值列表中

因此代码在网络上使用实验技术,这可能会在某些浏览器中引发错误。为防止停止应用程序并在控制台上记录异常,代码将放在try块中,并带有忽略错误的catch块。

<小时/> 在回答问题细节时,调用IIFE中的匿名函数,并在调用bsnPop.add时传递包含参数和回调的对象。在此阶段似乎没有创建弹出窗口。

try块中的下一个代码尝试提前通过请求DNS查找网站名称来加快对网站的访问,并在尝试检索内容之前打开与该网站的连接。

代码放在try块中,以适应浏览器在不支持请求的操作时抛出异常的可能性。该应用程序不认为缺少支持错误,并希望继续。

最终结果是,如果支持dns-prefetchpreconnect,浏览器可以获取提示并执行操作。如果不支持它们,则忽略生成的任何错误,并在下一个语句中继续执行代码 - 稍后连接到网站将必须以正常速度继续。