我知道这是一个老问题。我想为不同的浏览器添加浏览器特定的类,主要用于IE版本。
我使用了下面提到的代码:
<!--[if IE 7 ]> <html dir="ltr" lang="en-US" class="ie ie7 lte8 lte9"> <![endif]-->
<!--[if IE 8 ]> <html dir="ltr" lang="en-US" class="ie ie8 lte8 lte9"> <![endif]-->
<!--[if IE 9 ]> <html dir="ltr" lang="en-US" class="ie ie9 lte9"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!--><html dir="ltr" lang="en-US" class="not-ie"><!--<![endif]-->
现在问题是条件注释从ie + +开始,我想要所有ie版本的特定类。如果我也为webkit和moz浏览器上课,那就更好了。
此目的是从我现有的样式表中删除所有css hacks。
我想要的东西应该像这样工作,JScript解决方案也是可以接受的。
<!--[if IE 7 ]> <html dir="ltr" lang="en-US" class="ie ie7 lte8 lte9"> <![endif]-->
<!--[if IE 8 ]> <html dir="ltr" lang="en-US" class="ie ie8 lte8 lte9"> <![endif]-->
<!--[if IE 9 ]> <html dir="ltr" lang="en-US" class="ie ie9 lte9"> <![endif]-->
<!--[if IE 10 ]> <html dir="ltr" lang="en-US" class="ie ie10"> <![endif]--> <!--no more work for 1e10+ -->
<!--[if IE 11 ]> <html dir="ltr" lang="en-US" class="ie ie11"> <![endif]--> <!--no more work for 1e10+ -->
<!--[if !IE]><!--><html dir="ltr" lang="en-US" class="not-ie"><!--<![endif]-->
答案 0 :(得分:2)
使用以下JavaScript代码,它将在HTML标记中添加IE版本类:
<强>来源:强>
(function () {
var v = 3,
div = document.createElement('div'),
all = div.getElementsByTagName('i'),
browser,
isIE;
while ( div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->', all[0]);
v = v > 4 ? v : document.documentMode;
if (v) {
browser = " ie"
for(var i = 5; i<12; i++){
if(v < i) {
browser += ' lte-ie' + i;
}else if (v > i) {
browser += ' gte-ie' + i;
}else if (v == i) {
browser += ' ie' + i;
}
}
isIE = {
"version" : v
}
} else {
browser = ' not-ie';
isIE = false;
}
document.documentElement.className += browser;
window.ie = isIE;
}());
<强>缩小的:强>
(function(){for(var a=3,b=document.createElement("div"),c=b.getElementsByTagName("i");b.innerHTML="\x3c!--[if gt IE "+ ++a+"]><i></i><![endif]--\x3e",c[0];);if(a=4<a?a:document.documentMode){b=" ie";for(c=5;12>c;c++)a<c?b+=" lte-ie"+c:a>c?b+=" gte-ie"+c:a==c&&(b+=" ie"+c);a={version:a}}else b=" not-ie",a=!1;document.documentElement.className+=b;window.ie=a})();
<强>注释:强>
由于脚本支持IE5及更高版本,我保留所有版本检测。它可能对您没有用,但其他人可以发现它有用。有额外的CSS类没有坏处。
答案 1 :(得分:2)
在javascript中,您可以使用navigator.userAgent变量并检查它是否与IE用户代理(MSIE **或Trident / **)匹配
警告:Trident是检查IE的新方式:
var newIEReg = new RegExp("Trident\/([0-9]+)\.0")
var oldIEReg = new RegExp("MSIE ([0-9]+)\.[0-5]+")
var ieVersion = -1;
if(navigator.userAgent.match(newIEReg))
{
ieVersion = parseInt(newIEReg.$1) + 4;
}
else if(navigator.userAgent.match(oldIEReg))
{
ieVersion = parseInt(oldIEReg.$1);
}
答案 2 :(得分:0)
每个浏览器都有一个用户代理,因此您可以使用以下内容:
var user_agent = navigator.userAgent;
if(user_agent=="BROWSER_USER_AGENT"){
// your code
}
用户代理列表可在线获取。
答案 3 :(得分:0)
有关示例,请参阅此JSFiddle。
这支持IE 7 - 11,WebKit(Chrome,Safari等)和Gecko(Firefox等)。
使用JavaScript检测用户代理并根据哪个浏览器将类应用于正文:
<script>
var ua = navigator.userAgent;
if (!ua.contains("MSIE")) { // If it doesn't contain MSIE
document.body.classList.add("not-ie");
if (ua.contains("(Windows NT 6.3; Trident/7.0; rv:11.0)")) {
// IE11 pretends to not be IE and doesn't contain MSIE in the
// default user agent, but it contains the string above
document.body.classList.remove("not-ie");
document.body.classList.add("ie", "ie11");
} else if(ua.contains("Gecko")) {
document.body.classList.add("gecko");
} else if(ua.contains("WebKit")) {
document.body.classList.add("webkit");
}
} else {
document.body.classList.add("ie");
if (ua.contains("11.0")) {
// Just in case we're using an alternative user agent
document.body.classList.add("ie11");
} else if (ua.contains("10.6") || ua.contains("10.0")) {
document.body.classList.add("ie10");
} else if (ua.contains("9.0")) {
document.body.classList.add("ie9");
} else if (ua.contains("8.0")) {
document.body.classList.add("ie8");
} else if (ua.contains("7.0")) {
document.body.classList.add("ie7");
};
};
</script>
答案 4 :(得分:0)
主要解决方案:
我忘记了我在哪里获得了这个功能,所以我不能正确地给予它功劳,但它的效果非常好:
function getInternetExplorerVersion() {
var rv = -1; // Return value assumes failure.
if (navigator.appName == 'Microsoft Internet Explorer') {
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat(RegExp.$1);
}
if (rv > -1) {
return rv;
}
else {
return 0;
}
}
所以你能做的就是:
if(getInternetExplorerVersion() == 6) {
$('head').append('<link id="styles" rel="stylesheet" type="text/css" href="/ie6Styles.css" />');
}
或类似的东西。
其他解决方案: 对于其他浏览器,您还可以执行以下操作:
var is_chrome = navigator.userAgent.indexOf('Chrome') > -1;
var is_explorer = navigator.userAgent.indexOf('MSIE') > -1;
var is_firefox = navigator.userAgent.indexOf('Firefox') > -1;
var is_safari = navigator.userAgent.indexOf("Safari") > -1;
var is_Opera = navigator.userAgent.indexOf("Presto") > -1;
var is_Silk = navigator.userAgent.indexOf("Silk") > -1;
var is_Kindle = navigator.userAgent.indexOf("Kindle") > -1;
我更喜欢这些用于iPad / iPod / iPhone:
if (navigator.userAgent.match(/iPad/)) { iPad = true; }
if (navigator.userAgent.match(/iPhone/) || navigator.userAgent.match(/iPod/)) { iPhone = true; }
Modernizr效果很好,但它只会让您知道浏览器是否可以处理某些功能。有时您实际上必须针对特定浏览器定位其他修复,例如样式。这是上述任何解决方案都可以派上用场的地方。祝你好运,如果你有任何问题,请告诉我。
答案 5 :(得分:0)
您可以选择某种类型的JavaScript检测,但这样做会在丛林中肆虐,而不是直接处理问题。这通常被称为乐队援助修复。
你不应该为IE11,IE10甚至IE9使用黑客攻击。它们是相当称职且符合标准的浏览器。
我会考虑解决问题的核心 - 清理和简化标记,确保验证,关闭所有标签,声明尺寸,使用CSS重置,清除浮动等等。
如果您的问题与布局相关,那就是
如果它们不是,并且您正在使用一些在任何地方都不受支持的前沿功能,请使用功能检测 - 而不是浏览器检测。
这就是微软停止支持条件评论的确切原因。这也是他们在IE11中更改用户代理以完全忽略浏览器实际上是IE的原因。
他们这样做是为了鼓励正确的特征检测,即Modernizr而非UA嗅探,因为这是一个坏主意。
答案 6 :(得分:-2)