0

如何使用功能检测来制作由其他人编写的插件,以在所有可以实际工作/受支持的浏览器上工作。plugin的文档说它在 IE 8 中受支持,但实际上并不起作用。我知道这是因为浏览器检测不可靠,但我能做些什么才能让它在所有可以实际工作的浏览器中工作?

细节

举一个特定的例子,我使用 jQuery 选择的插件版本 0.9.7,正如文档所说 -

支持所有现代浏览器(Firefox、Chrome、Safari 和 IE9)。还启用了对 IE8 的旧版支持。

但是,我发现它不适用于许多 IE 8,但适用于 IE tester IE 8。然后在插件代码中,我发现了这个浏览器检测逻辑,它只是从插件逻辑中逃脱了 -

if ($.browser.msie && ($.browser.version === "6.0" || $.browser.version === "7.0")) {
   return this;
}

我发现它$.browser.version在我的 IE 8 上返回 7.0,这就是它不起作用的原因。好吧,没什么好惊讶的,我知道。我尝试删除$.browser.version === "7.0"条件,只是为了检查它是否真的在我的 IE 8 上有效并且有效。但是,我无法删除该条件,因为插件的作者已经这样做了,他一定知道得更好。

现在,我的问题是如何使用功能检测使其在所有可以实际工作的浏览器上工作。我想合乎逻辑的步骤是找出该插件使用了哪些所有浏览器功能。那我怎么发现呢?请原谅我对此的有限知识。我只是有特征检测的理论知识,它比浏览器检测更好等,但从未实际使用过任何进行特征检测的代码。我在大约 1-2 年前了解到这一点。

而这一次,当我搜索时,我开始了解Modernizer。这会有帮助吗?我不确定,因为它说它用于构建下一代 HTML5 和 CSS3 驱动的网站,而我们还没有大量使用 HTML5、CSS3。或者,一旦我知道插件需要哪些所有功能,jQuery.support对我来说就足够了。

一些进一步的推理

我发现这个问题Browser detection via object/feature detection作者询问是否可以使用特征检测来确定浏览器实际上是什么。一条评论说 - “功能检测的重点是让您可以了解浏览器是否确实具有您需要的功能。当您正确执行此操作时,您实际上并不关心它是什么浏览器,您只关心它是否具有完成工作所需的功能。” 我理解并同意这一点,但是说这些浏览器支持给定插件有什么意义。为什么插件作者不列出所有需要的功能,从而方便人们使用?但是,在我看来,列出支持的浏览器背后的要点只是通过假设理想的浏览器来给出兼容性的想法。

例如,两个理想的 IE 6 浏览器会有相同的选择下拉 z-index 问题,会干扰弹出 div。假设一个插件有这个问题,然后说这个插件与 IE 6 不兼容意味着一个理想的 IE 6 浏览器,而不是另一个 IE 8 浏览器,它的用户代理经过调整并返回 IE 6 作为浏览器版本。

在那种情况下(列出支持的浏览器背后的要点只是通过假设理想的浏览器来了解兼容性),使用特征检测识别浏览器是否有意义?如果,那么为什么没有很多示例片段可用?

很多问题.. :) 我想,今天我问了这一切......

4

1 回答 1

0

您可以尝试在插件中或在使用插件之前执行此操作:

var checkString = '<!--[if lt IE 7 ]> <div id="my-id" class="lt-ie7" > <![endif]--><!--[if IE 7 ]> <div id="my-id" class="ie7"> <![endif]--><!--[if IE 8 ]> <div id="my-id" class="ie8"> <![endif]--><!--[if IE 9 ]> <div id="my-id" class="ie9"> <![endif]--><!--[if (gt IE 9)|!(IE)]><!--> <div id="my-id" class="other"> <!--<![endif]-->';

$('body').append(checkString);

$('body').append('Your browser is: '+$('#my-id').attr('class'));

示例:http: //jsbin.com/inisol

顺便说一句:没有 IE 来测试它。希望它有效。

于 2012-02-09T16:43:18.237 回答