SWF对象库可以在所有浏览器中使用吗?

时间:2013-04-22 13:05:06

标签: javascript jquery

            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中使用。我怀疑它是否适用于所有浏览器?如果是,则意味着,它是如何工作的?

1 个答案:

答案 0 :(得分:1)

为什么它不起作用?检查ActiveX是有条件的,以及在发生错误时捕获对ActiveX对象的访问。

因此,任何不支持非IE行为的浏览器(即IE以外的所有浏览器;)都将由else处理。

BTW:repos中的最新版本的代码有点不同结构

.... }
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(再次使用try-catch)。最常见的情况是手头覆盖。他们只是检查navigator.plugins报告的浏览器加载的所有插件。由于这是这样做的方式,因此大多数浏览器永远不会进入else if部分。

要获取有关navigator.plugins的一些信息,请查看MDN docs。这是一个浏览器,可在所有浏览器中使用(通常的IE除外,但上面代码中的技术将处理此问题)。这将永远是“插件”。如果您尝试以不同方式访问它,例如“插件”,由于未定义,您将收到错误。

我不太确定你提到jQuery是什么意思。这是vanilla JS,因此没有使用jQuery。我们经常使用这个库,我可以向你保证,它是稳定的并经过充分测试。