12

我正在尝试找到一种方法来显示一个指向 IE 用户的链接和另一个使用 javascript 或条件注释(或其他任何方法)的所有其他浏览器的链接。

基本上...

//pseudo code
<!--[if IE]>
    <a href"ie-only.html">click here!</a>
<!--[else]>
    <a href"all-other-browsers.html">click here!</a>
<![endif]-->

我认为条件注释标签(仅适用于 Internet Explorer)不可能做到这一点。另外,我认为没有“其他”声明。

有没有办法用javascript做到这一点?请帮忙!谢谢!

4

9 回答 9

23

我认为条件注释标签不可能做到这一点(仅适用于 Internet Explorer)

是的。您只需将非 IE 浏览器的内容保留在某个位置,使其成为条件注释子句的一部分,但实际上不在 <!-- 注释 --> 内。然后不知道条件注释的浏览器会很好地看到内容。这被称为下层显示的条件注释。

不幸的是,微软给你的标记是无效的 HTML(甚至不是格式良好的 XML)。要使其通过集合,您只需要一些额外的“--”:

<!--[if IE]> This is IE! <![endif]-->
<!--[if !IE]><!--> This ain't IE! <!--<![endif]-->

尽管我不得不回应 AnonJr 的未回答,但与其他浏览器相比,您很少需要为 IE 提供完全独立的链接/页面。如果你正在做一些棘手的事情,比如复杂的 VML 和 ActiveX 在 IE 中使用 Flash 在其他浏览器上工作,我想这可能是有原因的,但通常在同一个基本页面上进行一些 CSS 和脚本黑客攻击就足够了。

于 2009-04-11T00:03:34.280 回答
13

这不会是流行的答案,但是该死的时候有人开始发布它了-停止使用特定于浏览器的垃圾。当新版本出来时,你只会让未来的问题永久存在。

如果开发人员花费了额外的时间(是的,这需要时间和艰苦的工作。如果你不能说服你的客户你还不够努力),那么我们就不会看到 IE7 “破坏网络”并且会有IE8 的喧闹声更甚。

是的,IE 的标准不符合其他标准。但是,Fx 也缺少标准中的某些内容。当谈到“标准”时,他们都很糟糕。但他们都在变得更好。(以不同的速度,但它们都在变得更好。)

首先想想你为什么要这样做,并问自己是否真的想在下一个浏览器版本出现时处理这个问题,你必须重新调整浏览器检测以及如何处理浏览器 Y 的版本 X。

[/咆哮]

编辑:要回答一些指出我没有真正回答问题的明显事实的评论,没有更多信息,这个问题让我想知道我们是否不是在试图帮助一个人决定用钉子钉钉子玻璃瓶或鞋子……

于 2009-04-10T21:35:48.583 回答
6

这是 Microsoft 认可的方式:

<!--[if IE]>
    <a href="ie-only.html">click here!</a>
<![endif]-->
<![if !IE]>
    <a href="all-other-browsers.html">click here!</a>
<![endif]>

更多信息,请访问http://msdn.microsoft.com/en-us/library/ms537512(VS.85).aspx

编辑

从 IE 5 开始,此代码隐含地保证在所有当前和未来版本的 IE 中工作。对于非 IE 浏览器,代码通过依赖那些忽略“无意义”<![if !IE]>标签的浏览器工作,它们都这样做,我已经从未见过它失败。对于只使用良好的 ol' HTML 注释的版本,请参阅bobince 的答案,我实际上更喜欢 Microsoft 提供的解决方案。

于 2009-04-10T20:58:39.327 回答
3

我想出如何做到这一点的一种方法:

从http://www.quirksmode.org/js/detect.html获取 javascript 代码并将其放入<head>标记中。

然后在您的<body>标签中使用:

<script type="text/javascript">
<!--
if (BrowserDetect.browser == 'Explorer') {
    document.write('<a href="#">Explorer</a>');
} else {
    document.write('<a href="#">Other Browsers</a>');
}
// -->
</script>

不确定这是否是最简单的方法,但它完成了工作。

于 2009-04-10T21:14:25.060 回答
2

也许是在黑暗中开枪,但这行得通吗?

<style>

    a.forIeOnly {display: none; }
    a.notForIe  {display: block; }

</style>

<!--[if ie]>

<style>
    a.forIeOnly {display: block;}
    a.notForIe  {display: none; }
</style>

<![endif]-->

<a href="#" class="forIeOnly">Link One</a>
<a href="#" class="notForIe">Link Two</a>

它远不像 if/else 语句那样干净/有吸引力,但是……这是我能想到的实现解决方案的最简单方法。尽管它本身可能充满了问题。

于 2009-04-10T21:04:23.523 回答
1

将此添加到您的标题中:

<script src="http://github.com/rafaelp/css_browser_selector/raw/master/css_browser_selector.js" type="text/javascript"></script>

然后你想要你的 .css 页面:

/* Chrome Only */
.chrome embed {
    display: none;
}

/* Firefox Only */
.gecko video {
    display: none;
}

来源:http ://rafael.adm.br/css_browser_selector/

可用的浏览器代码 [浏览器]:

ie - Internet Explorer (All versions)
ie8 - Internet Explorer 8.x
ie7 - Internet Explorer 7.x
ie6 - Internet Explorer 6.x
ie5 - Internet Explorer 5.x
gecko - Mozilla, Firefox (all versions), Camino
ff2 - Firefox 2
ff3 - Firefox 3
ff3_5 - Firefox 3.5
ff3_6 - Firefox 3.6 new
opera - Opera (All versions)
opera8 - Opera 8.x
opera9 - Opera 9.x
opera10 - Opera 10.x
konqueror - Konqueror
webkit or safari - Safari, NetNewsWire, OmniWeb, Shiira, Google Chrome
safari3 - Safari 3.x
chrome - Google Chrome
iron - SRWare Iron
于 2015-09-01T19:14:11.007 回答
0

我没有尝试,但也许你可以在 CSS 上使用 IE 缺陷。Eric Meyer 写了这篇关于这个主题的文章:Tricking Browsers and Hiding Styles

于 2009-04-10T21:01:14.967 回答
0

你总是可以使用 CSS 来隐藏特定浏览器的代码。例如,考虑以下代码:

<a href"ie-only.html" id="ie-only">click here!</a>
<a href"all-other-browsers.html" id="other-browsers">click here!</a>

您可以应用以下 CSS hack,相应的链接将显示到相应的浏览器。

/* Display settings for most browsers */
#ie-only {display: none;}
#other-browsers {display: block;}

/* Display settings for IE <= 6 */
* html #ie-only {display: block;}
* html #other-browsers {display: none;}
于 2009-04-10T21:05:38.123 回答
0

IE 支持条件编译,您可以使用它轻松交付仅限 IE 的代码,而无需执行用户代理嗅探或功能检测。

/*@cc_on
   /*@if (@_jscript)
      alert("IE.");
   @else @*/
      alert("Not IE.");
   /*@end
@*/
于 2009-04-10T21:54:01.440 回答