0
            if (typeof t.plugins != D && typeof t.plugins[S] == r) {
                ab = t.plugins[S].description;
                if (ab && !(typeof t.mimeTypes != D && t.mimeTypes[q] && !t.mimeTypes[q].enabledPlugin)) {
                    T = true;
                    X = false;
                    ab = ab.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
                    ag[0] = parseInt(ab.replace(/^(.*)\..*$/, "$1"), 10);
                    ag[1] = parseInt(ab.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
                    ag[2] = /[a-zA-Z]/.test(ab) ? parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0
                }
            } else {
                if (typeof O.ActiveXObject != D) {
                    try {
                        var ad = new ActiveXObject(W);
                        if (ad) {
                            ab = ad.GetVariable("$version");
                            if (ab) {
                                X = true;
                                ab = ab.split(" ")[1].split(",");
                                ag = [parseInt(ab[0], 10), parseInt(ab[1], 10), parseInt(ab[2], 10)]
                            }
                        }
                    } catch (Z) {}
                }
            }
            return {
                w3: aa,
                pv: ag,
                wk: af,
                ie: X,
                win: ae,
                mac: ac
            }
        }()

以上代码用于 swf 对象库。他们检查插件和用 jquery 编写的 ActiveX 对象。Activex 仅适用于 IE。我的疑问是它是否适用于所有浏览器?如果是,它是如何工作的?

4

1 回答 1

1

为什么它不应该工作?对 ActiveX 的检查是有条件的,并且在发生错误时对捕获的 ActiveX 对象的访问也是如此。

因此,任何不支持非 IE 行为的浏览器(即除 IE 之外的所有浏览器 ;)),都将由else.

顺便说一句:回购中的最新版本的代码结构略有不同

.... }
else if (typeof win.ActiveXObject != UNDEF) {
   try {
       var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
       if (a) { // a will return null when ActiveX is disabled
          d = a.GetVariable("$version");
          if (d) {
             ie = true; // cascaded feature detection for Internet Explorer
             d = d.split(" ")[1].split(",");
             playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
            }
        }

   catch(e) {}
}

它不再是一个else,而是一个else if(再次尝试捕获)。最常见的情况是事先涵盖的。他们只是检查浏览器加载的所有插件,如navigator.plugins. 由于这是这样做的方式,大多数浏览器永远不会进入该else if部分。

要获取有关的一些信息navigator.plugins,请查看MDN 文档。这是一个浏览器的东西,在所有浏览器中都可用(除了通常的 IE,但上面代码中的技术将解决这个问题)。这将始终是“插件”。如果您尝试以不同的方式访问它,例如“插件”,您将收到一个错误,因为它没有定义。

我不太清楚你提到 jQuery 是什么意思。这是 vanilla JS,所以没有使用 jQuery。我们经常使用这个库,我可以向你保证,它稳定且经过良好测试。

于 2013-04-22T13:23:24.453 回答