在Javascript文件中编写Internet Explorer的条件代码

时间:2011-06-27 18:44:15

标签: javascript internet-explorer internet-explorer-7 browser-detection

我想知道是否可以在Internet Explorer中为javascript文件编写条件javascript

即。像这样......

if (is IE7) {
    do this } else {
    do this instead
});

我知道我可以在头部使用条件注释为IE加载完全不同的脚本,但我只想更改一小段代码,因此加载完全不同的工作表将是一种“昂贵”的方法。

7 个答案:

答案 0 :(得分:4)

编写Javascript时,执行功能检测始终是一种方法,而不是浏览器检测。因此,而不是if (IE7)if (feature)

例如,如果您想知道您的浏览器是否支持getElementsByClassName(),而不是检查浏览器版本,则检查是否存在该函数(if (document.getElementsByClassName))。

请阅读这篇精彩的文章:

Object detection on Quirksmode

  

如果你想知道是否   查看您的页面支持的浏览器   您想要使用的某些对象   你的代码,你永远不应该使用   浏览器检测。当然,你知道的   这个和那个浏览器将支持   你的代码在某某浏览器中   惯于。但是其他浏览器呢,   模糊的浏览器?

答案 1 :(得分:2)

不在JavaScript文件中。

一些替代方案是:

在加载脚本之前使用全局变量来检入JavaScript文件。这是一种混合方法,可能会出现凌乱,但它可以保证IE检测。

<!--[if IE]>
<script type="text/javascript">
  var is_ie = true;
</script>
<![endif]-->
<script type="text/javascript" src="somefile.js"></script>

或者,在JavaScript文件中使用浏览器或object detection的更传统的方法。

答案 2 :(得分:2)

Conditional compilation正是您所寻找的。

<script>
/*@cc_on

  @if (@_jscript_version == 5.7 && window.XMLHttpRequest)
    document.write("You are using IE7");

  @end

@*/
</script>

答案 3 :(得分:1)

尽管这是对原始问题的回答,但这不是你应该做的。所以不要这样做!

为什么不弄清楚您正在使用哪个浏览器并将其存储在javascript中的变量中。然后你可以在你的javascript中使用statemenets等。例如如果我是IE,那么这样做,否则这样做。你明白了!

你看到了这个吗? Browser sniffing

突出的一点:

var is = {
  ff: window.globalStorage,
  ie: document.all && !window.opera,
  ie6: !window.XMLHttpRequest,
  ie7: document.all && window.XMLHttpRequest && !XDomainRequest && !window.opera,
  ie8: document.documentMode==8,
  opera: Boolean(window.opera),
  chrome: Boolean(window.chrome),
  safari: window.getComputedStyle && !window.globalStorage && !window.opera
}

答案 4 :(得分:1)

我的首选脚本是PPK的BrowserDetect script。它轻巧,易于理解,不需要您使用库。加载后,您可以编写如下代码:

if (BrowserDetect.browser == "Explorer" && BrowserDetect.version >= 6 && BrowserDetect.version <= 8) {
    // IE6-8 code
{

当然,你应该避免在所有(合理的)成本下使用它,但是有时候将IE特定的代码隔离得比较干净,而不是试图破解IE特定的功能和错误。

答案 5 :(得分:0)

如果您使用的是jquery,则代码执行此操作

if ($.browser.msie && $.browser.version == '6.0') {
     //do IE specific code
}

答案 6 :(得分:-1)

如果你想使用jquery,它有一个内置的浏览器检测。

http://api.jquery.com/jQuery.browser/