如何显示特定于浏览器的HTML?

And*_*rew 10 html javascript conditional browser-detection

我正试图找到一种方法来显示一个链接到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]-->
Run Code Online (Sandbox Code Playgroud)

我不认为条件评论标签(仅适用于Internet Explorer)可以实现这一点.另外,我认为没有"其他"声明.

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

bob*_*nce 22

我不认为条件评论标签(仅适用于Internet Explorer)可以实现这一点

当然是啦.您只需将非IE浏览器的内容保留在某个位置,使其成为条件注释子句的一部分,但实际上不在<! - comment - >中.然后,不了解条件注释的浏览器会看到内容正常.这被称为下层揭示的条件评论.

不幸的是,标记微软给你的是无效的HTML(甚至没有格式良好的XML).为了让它通过,你只需要一些额外的' - ':

<!--[if IE]> This is IE! <![endif]-->
<!--[if !IE]><!--> This ain't IE! <!--<![endif]-->
Run Code Online (Sandbox Code Playgroud)

虽然我必须回应AnonJr的无答案,因为与其他浏览器相比,你很少需要一个完全独立的IE链接/页面.如果你正在做一些棘手的事情,比如复杂的VML和ActiveX在IE浏览器中使用Flash在其他浏览器上工作,我想这可能是有原因的,但通常在同一基本页面上的一些CSS和脚本黑客应该就足够了.

  • @Marc:在IE10中删除了条件注释(兼容模式除外),因此您只能使用它们注入回溯到IE9.有关背景信息,请参见http://msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx.幸运的是IE10 +通常足够好,你很少需要在内容级别浏览器嗅探. (2认同)

Ano*_*nJr 14

这不是一个受欢迎的答案,但有人开始发布它的该死的时间 - 停止使用浏览器特定的垃圾.当新版本出现时,你只会使未来的问题永久化.

如果开发人员花了额外的时间(是的,这需要时间和努力工作.如果你不能说服你的客户你没有足够努力)那么我们就不会看到IE7"打破网络"而且会有与IE8相比,更不用说了.

是的,IE的标准比其他标准要低.但是,Fx也缺少某些标准的东西.当谈到"标准"时,他们都很糟糕.但他们都变得越来越好.(以不同的速度,但他们都变得更好.)

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

[/咆哮]

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

  • 对于"我是否应该显示特定于浏览器的HTML?"这个问题,这是一个很好的答案,但这不是问题. (6认同)

Dav*_*lar 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]>
Run Code Online (Sandbox Code Playgroud)

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

编辑

从IE 5开始,隐式保证此代码适用于IE的所有当前和未来版本.对于非IE浏览器,代码依赖于那些忽略"荒谬" <![if !IE]>标记的浏览器,他们都做了,我已经从未见过失败.对于只使用良好的HTML评论的版本,请参阅bobince的答案,我实际上更喜欢微软提供的解决方案.

  • 对于所有非IE浏览器,第一部分是HTML注释.第二部分是*不是HTML评论 - 在<!之后的双击.不在那里.非IE浏览器忽略"<![if!IE]>",但后面的HTML不是.我保证第二个链接出现在所有非IE浏览器中.:) (2认同)
  • @Marc这是正确的,IE中的条件注释不能超越IE 9模式.您仍然可以使用特征检测和/或UA嗅探. (2认同)