如何使用条件编译来嗅探IE8

发布于 2024-11-19 14:47:43 字数 203 浏览 2 评论 0原文

我想嗅探当前版本的IE8(我很抱歉,但没有其他办法,我必须这样做)。我知道应该使用功能嗅探而不是浏览器嗅探,但是嘿,我的老板不知道,对吧?

现在我使用了这个条件编译代码:

var ie8 = false/*@cc_on @_jscript_version == 8@*/

但似乎它还包括IE7。有什么想法吗?

I want to sniff the current version of IE8 (and I'm so sorry, but no other way, I have to do that). I know that feature sniffing should be used instead of browser sniffing, but hey, my boss doesn't know that, right?

Now I used this conditional compiling code:

var ie8 = false/*@cc_on @_jscript_version == 8@*/

But seems that it also includes IE7. Any idea?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

芸娘子的小脾气 2024-11-26 14:47:43

在不使用条件编译的情况下,您可以使用条件注释在您想要测试的每个 IE 的 html 元素上设置一个类,例如:(

<!--[if lt IE 7 ]> <html lang="en" class="ie6"> <![endif]-->
<!--[if IE 7 ]>    <html lang="en" class="ie7"> <![endif]-->
<!--[if IE 8 ]>    <html lang="en" class="ie8"> <![endif]-->
<!--[if IE 9 ]>    <html lang="en" class="ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html lang="en"> <!--<![endif]-->

来自 http://initializr.com/)

那么在 JS 中测试该类就很简单了:

var ie8 = !!document.getElementsByTagName("html")[0].className.match(/ie8/);

Without using conditional compiles, you could use conditional comments to set a class on the html element for each IE you want to test for, like:

<!--[if lt IE 7 ]> <html lang="en" class="ie6"> <![endif]-->
<!--[if IE 7 ]>    <html lang="en" class="ie7"> <![endif]-->
<!--[if IE 8 ]>    <html lang="en" class="ie8"> <![endif]-->
<!--[if IE 9 ]>    <html lang="en" class="ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html lang="en"> <!--<![endif]-->

(from http://initializr.com/)

Then it would be a simple matter of testing for the class in JS:

var ie8 = !!document.getElementsByTagName("html")[0].className.match(/ie8/);
霓裳挽歌倾城醉 2024-11-26 14:47:43

以下假设您使用的是 Internet Explorer...

首先,测试浏览器版本极其异常 - document.documentMode 是应该测试的(因为页面可以处于 IE8 模式)即使使用 IE9 或 IE10):

if (document.documentMode == 8) { ...

如果您有一些非常奇怪的要求,那么您可以可靠地检测 JScript 版本,例如 IE8 的 _jscript_version 为 5.8(请参阅http://en.wikipedia.org/wiki/Conditional_comment ):

var ieJsVer = Function('return/*@cc_on @_jscript_version @*/;')();
var isIE8 = (ieJsVer == 5.8);

条件注释放在字符串中这样它就不会被可能发生的任何 JavaScript 压缩删除(这可能会删除注释)。

重要的 Internet Explorer 11 编辑:

  • 已添加;在 Function() 字符串的末尾 - 否则 EDGE 模式下的 IE11 会抛出异常 - arrrgh!
  • IE11 处于 EDGE 模式,则 ieJsVer 未定义
  • IE11 处于 docMode <= 10,则 ieJsVer 为 11
  • IE11 处于 EDGE 模式,返回 document.documentMode 未定义

The following presumes you are using Internet Explorer...

Firstly, it is extremely abnormal to test for the browser version - the document.documentMode is what should be tested for (because a page can be in IE8 mode even if using IE9 or IE10):

if (document.documentMode == 8) { ...

If you have some really strange requirement, then you can reliably detect the JScript version e.g. _jscript_version is 5.8 for IE8 (see http://en.wikipedia.org/wiki/Conditional_comment ):

var ieJsVer = Function('return/*@cc_on @_jscript_version @*/;')();
var isIE8 = (ieJsVer == 5.8);

The conditional comment is put inside a string so that it won't be removed by any JavaScript compression that might occur (which may strip out comments).

Important Internet Explorer 11 edit:

  • Added ; at end of Function() string - otherwise IE11 in EDGE mode throws an exception - arrrgh!
  • IE11 in EDGE mode then ieJsVer is undefined
  • IE11 in docMode <= 10 then ieJsVer is 11
  • IE11 in EDGE mode returns undefined for document.documentMode
べ繥欢鉨o。 2024-11-26 14:47:43

为什么不使用条件注释来切换设置变量的脚本?喜欢:

<head>
    <script>
        window.ie8 = false;
    </script>
    <!--[if IE 8]>
        <script>
            window.ie8 = true;
        </script>
    <![endif]-->
</head>

虽然它有点冗长,但也许它也更可靠。

Why not use conditional comments to toggle a script that sets the variable? Like:

<head>
    <script>
        window.ie8 = false;
    </script>
    <!--[if IE 8]>
        <script>
            window.ie8 = true;
        </script>
    <![endif]-->
</head>

Granted it's a bit verbose, but perhaps it's also more reliable.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文