是否可以为每个浏览器提供不同的JavaScript代码?

时间:2011-08-19 02:04:31

标签: javascript html

我在这里找到了过去帖子的代码,如下所示:

<!--[if IE]>
<script type="text/javascript" src="js/ie.js"></script>
<![endif]-->
<!--[if !IE]>-->
<script type="text/javascript" src="js/all.js"></script>
<!--<![endif]-->

有没有办法让它像野生动物园的单独的.js文件和mozilla的另一个文件? 谢谢你的帮助

8 个答案:

答案 0 :(得分:3)

是。您可以通过编程方式检查用户拥有的浏览器,然后在头部添加脚本标记。

例如,

 if (navigator.userAgent.indexOf("Firefox") != -1) {
   var head = document.getElementsByTagName('head')[0];
   var script = document.createElement('script');
   script.type = 'text/javascript';
   script.src = 'firefoxScript.js';
   head.appendChild(script);
}

然而,这通常是一个坏主意。您不应该根据浏览器更改您的行为,因为如果浏览器发生更改,则会使您难以维护代码。最好使用特征检测。 Modernizr是一个很好的框架。

或者,只需使用已经解决了大多数浏览器兼容性问题的框架,例如jQuery

答案 1 :(得分:1)

如果你不能使用javascript库,比如jQuery,MooTools,Dojo等,你应该,而不是嗅探用户代理(浏览器),只检测它的功能,否则你最终会得到JS文件对于IE6,IE7,IE8,因为它们都具有不同的功能。

有关详细信息,请查看http://www.quirksmode.org/js/support.htmlhttp://www.modernizr.com/

答案 2 :(得分:1)

作为免责声明,这是一个可怕的想法,但是这里有。您可以在jQuery中执行以下操作,这假设您使用的是jQuery,尽管如果您是,那么您将不需要它,但无论如何

if ($.broswer.msie) $.getScript('js/ie.js')
else if ($.broswer.mozilla) $.getScript('js/firefox.js')
else if ($.broswer.opera) $.getScript('js/opera.js')
else if ($.broswer.webkit) $.getScript('js/chrome.js')

答案 3 :(得分:1)

通常认为使用&#34;特征检测&#34;是一种更好的策略。而不是&#34;浏览器检测&#34;并根据个人功能是否存在来调整其技术的代码。

随着浏览器的发展,修复错误,添加功能等,该系统随着时间的推移会更具可扩展性。因为它会根据某个特定功能或行为是否存在而不是试图跟上来自动调整所有浏览器的所有版本。

例如,在今天最新的浏览器版本中,几乎除了IE9之外的所有内容都支持CSS3过渡。但是许多浏览器的旧版本都不支持它们,有一天IE的某些未来版本会支持它们。

如果您使用功能检测来查看CSS3是否存在并且如果它存在则使用它并使用后备机制(如果它没有),那么您不必跟踪任何这些版本。您可以检测该功能是否存在。就这么简单。当IE的未来版本支持CSS3转换时,您不必更新代码以利用它 - 它会自动执行此操作。当有人在您的网站上显示您尚未专门编码的浏览器时,即使您从未为该浏览器编码,您的功能检测仍可能仍然有效。

答案 4 :(得分:0)

我认为我们不再需要这样做,因为现代Javascript框架负责使用跨浏览器兼容性。最好使用jQuery或类似的东西来重新发明轮子......

答案 5 :(得分:0)

这些应该有所帮助: http://www.quirksmode.org/js/detect.html http://www.javascriptkit.com/javatutors/navigator.shtml

或使用jQuery;)

答案 6 :(得分:0)

正如在另一个答案中所说的那样,最好使用一个框架来覆盖浏览器的差异。在现代Web设计中,您不应该测试用户代理的功能支持,而是使用诸如modenizer之类的库(找到here)。这将为您提供关于某些特征是否存在的全局变量

答案 7 :(得分:0)

这些是IE Conditional Comments,它们仅适用于Internet Explorer。 虽然它们可以为这个历史悠久的错误和功能缺乏的浏览器提供后备,但这并不是真正被认为是提供跨浏览器支持的最佳方式。

相反,您应该使用功能检测来确定每个浏览器中缺少的内容,并加载替代脚本或禁用其他功能。

查看Modernizr,它可以自动测试几乎所有新功能,并允许您在Javascript和CSS中使用结果。