Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何显示特定于浏览器的HTML?_Javascript_Html_Conditional_Browser Detection - Fatal编程技术网

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

Javascript 如何显示特定于浏览器的HTML?,javascript,html,conditional,browser-detection,Javascript,Html,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> <![end

我试图找到一种方法来显示一个指向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实现这一点?请帮忙!谢谢

这是微软认可的方式:

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

更多信息请访问

编辑
此代码隐式地保证在从IE5开始的所有当前和未来版本的IE中工作。对于非IE浏览器,代码的工作原理是依赖于那些忽略了“无意义的”
标记的浏览器,它们都是这样做的,我从来没有看到过失败。对于一个只使用好的ol'HTML注释的版本,请参见,实际上我更喜欢微软提供的解决方案。

我没有尝试过,但也许你可以在CSS上使用IE漏洞。埃里克·迈耶(Eric Meyer)就这一主题写了这篇文章:.

也许是在黑暗中拍摄,但这行得通吗

<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>

a、 forIeOnly{显示:无;}
a、 notForIe{display:block;}

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

您可以随时使用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技巧,相应的链接将显示在相应的浏览器上

/* 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;}
/*大多数浏览器的显示设置*/
#ie only{显示:无;}
#其他浏览器{display:block;}

/*显示IE的设置我已经找到了一种方法:

从获取javascript代码并将其放入
标记中

然后在
标记中使用:

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


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

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

如果开发人员花了额外的时间(是的,这需要时间和努力。如果你不能说服你的客户你还不够努力),那么我们就不会看到IE7“破网”,IE8的喧嚣也会更少

是的,IE比其他的更不符合标准。但是,Fx也遗漏了一些属于标准的东西。当涉及到“标准”时,它们都很糟糕。但他们都在好转。(虽然速度不同,但都在好转。)

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

[/rant]

编辑:回答一些评论,这些评论指出了一个明显的事实,即我没有真正回答这个问题,没有更多的信息,这个问题让我想知道我们是否不是在试图帮助一个人决定

IE支持,您可以使用它轻松地交付仅适用于IE的代码,而无需执行用户代理嗅探或功能检测

/*@cc_on
   /*@if (@_jscript)
      alert("IE.");
   @else @*/
      alert("Not IE.");
   /*@end
@*/
我认为使用条件注释标记(仅在internet explorer中可用)不可能做到这一点

当然是。您只需将非IE浏览器的内容保留在一个位置,使其成为条件注释子句的一部分,但实际上不在注释子句中。然后,不知道条件注释的浏览器将可以很好地看到内容。这称为条件注释

不幸的是,微软给你的标记是无效的HTML(甚至不是格式良好的XML)。要使其通过测试,您只需添加几个“--”即可:


这可不是我!

虽然我不得不回应AnonJr的回答,但与其他浏览器相比,IE很少需要完全独立的链接/页面。如果你在IE中使用Flash在其他浏览器上进行复杂的VML和ActiveX操作,我想这可能是有原因的,但通常在同一个基本页面上进行一些CSS和脚本攻击就足够了。

将此添加到标题中:

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

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

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

你只是随便说说,没有给出一个替代方案/没有/使用这些功能,那么??这对于很多事情来说都是不可能的。(例如:将参数传递到xslt文件以命名)@Peter-对象检测?由于我从未使用过XSLT,因此未在您的特定情况下进行测试。这是对“我是否应该显示特定于浏览器的HTML?”问题的一个很好的回答,但这并不是所问的问题。请欣赏您的回答背后的情感,但首先回答问题并添加此作为警告更合适。OP这样做可能有一个非常合理的理由;许多公司都将IE作为默认浏览器,并且(不幸的是)内联网功能只能与IE一起使用。我非常嫉妒——我无法想象在一个没有遗留系统、管理员访问限制、受限网络权限、专有MS功能或时间和预算限制的世界里会是什么样子。我不知道有多少开发人员不想这样做,但有时你必须做出最好的妥协:o/当然,第二个链接将是所有非IE浏览器评论的一部分(因此被忽略)?正如Tom所说,因为IE是唯一一个尊重这样的条件语句的浏览器,而条件是!对于所有非IE浏览器,第一部分是HTML注释。第二部分不是HTML注释,@Marc后面的双破折号是正确的,IE中的条件注释不起作用
/* Chrome Only */
.chrome embed {
    display: none;
}

/* Firefox Only */
.gecko video {
    display: none;
}
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