Что лучший способ состоит в том, чтобы обнаружить Internet Explorer 6 с помощью JavaScript?
If browser == IE6 {
alert('hi');
}
Вы спрашиваете, как быстро разрабатывать веб-приложения с помощью корпоративных рамок по сравнению с RoR.
Мой первоначальный ответ: вы не можете ожидать разработки веб-приложений в .NET/( Spring/Hiberbnate), как для RoR. Намного больше настроек, гораздо больше, чтобы узнать и понять на более глубоком уровне. Много конфигураций.
Я не вижу php здесь. Я предполагаю, что гораздо больше людей используют php. Почему бы не посмотреть на php и симфонию. Symfony выводит свои основы из RoR.
Если ни одно из вышеперечисленного не подходит для счета, я бы пошел на Spring/Hibernate/MySQL/Tomcat. Мы разработали несколько крупномасштабных веб-приложений с этим стеком в гибкой Scrum/Sprint scenerio
-121--4293881-Я согласен с fbrereto.
Если в конструкторе возникает ошибка, эквивалентная выражению «построение этого объекта не работало» или «объект не мог быть создан», и поэтому необходимо обработать этот факт - я бы сделал это только для неустранимых ошибок, для которых объект нельзя использовать иначе, например, не удалось открыть файл, который мы ожидали открыть в классе MySetticeReader.
-121--4631726-Условные комментарии являются хорошей альтернативой:
<!--[if IE 6]>
<script>
var everythingIsBroken = true;
</script>
<![endif]-->
Edit : Если вы все еще ищете поддержку IE 6 в 2017 или после... Ну, мое сердце выходит к тебе. Ответ на этот вопрос в 2017 году действительно не стоит беспокоиться об ИС 6. Это больше не поддерживаемый браузер. Любая операционная система, которая может запускать этот браузер и сам браузер, больше не получает обновлений безопасности. Это означает, что пользователи, использующие это программное обеспечение, подвергаются большому риску эксплуатации. Это большая проблема для людей, которые не могут позволить себе обновление.
Какой лучший способ обнаружить <броузер_x> с помощью JavaScript?
Ни в коем случае.
Как упоминал Эндрю Мур в комментариях в этой заметке, вы должны использовать обнаружение возможностей. Это сделает ваш код более "перспективным". Если другой браузер включит или больше не будет поддерживать какую-либо функцию в будущем, то ваш код будет в безопасности. Существует ряд сайтов, объясняющих, как с этим справиться. Концепция огромна и охватывает множество концепций, так что вместо того, чтобы писать сочинение/книгу по этому поводу, вот некоторые ресурсы для использования:
Я не уверен, есть ли какая-то особая причина, по которой вы хотите обнаружить IE 6, но в целом, лучше попытаться обнаружить возможности браузера, чем обнаруживать его. Это легко сделать с помощью JQuery, используя jQuery.support: http://api.jquery.com/jQuery.support/.
var ua = window.navigator.userAgent;
var msie = ua.indexOf ( "MSIE " );
if ( msie > 0 ) // If Internet Explorer, return version number
return parseInt (ua.substring (msie+5, ua.indexOf (".", msie )));
else // If another browser, return 0
return 0;
Источник: http://support.microsoft.com/kb/167820
Не основывайте свое обнаружение на пользовательском агенте. Есть много других браузеров, которые используют движок Trident 4 (тот, который использует IE6), но не IE6.
Ответ прост: не обнаруживать браузер , обнаруживать движок . Для этого вы должны использовать так называемое обнаружение на основе функций .
Использование обнаружения на основе функций имеет следующие преимущества:
Следующий скрипт использует функции браузера для обнаружения движка. Благодарим производственную группу MooTools ( http://mootools.net/developers/ ).
Примечание: Приведенный ниже фрагмент был изменен для работы без фреймворка javascript MooTools . Если вы действительно хотите работать с MooTools , вам больше не нужен этот код, он является частью дистрибутива.
function $tryCatch(){
for (var i = 0, l = arguments.length; i < l; i++){
try {
return arguments[i]();
} catch(e){}
}
return null;
};
var Browser = {
Engine: {name: 'unknown', version: 0},
Platform: {name: (window.orientation != undefined) ? 'ipod' : (navigator.platform.match(/mac|win|linux/i) || ['other'])[0].toLowerCase()},
Features: {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)},
Plugins: {},
Engines: {
presto: function(){
return (!window.opera) ? false : ((arguments.callee.caller) ? 960 : ((document.getElementsByClassName) ? 950 : 925));
},
trident: function(){
return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? ((document.querySelectorAll) ? 6 : 5) : 4);
},
webkit: function(){
return (navigator.taintEnabled) ? false : ((Browser.Features.xpath) ? ((Browser.Features.query) ? 525 : 420) : 419);
},
gecko: function(){
return (!document.getBoxObjectFor && window.mozInnerScreenX == null) ? false : ((document.getElementsByClassName) ? 19 : 18);
}
}
};
Browser.Platform[Browser.Platform.name] = true;
Browser.detect = function(){
for (var engine in this.Engines){
var version = this.Engines[engine]();
if (version){
this.Engine = {name: engine, version: version};
this.Engine[engine] = this.Engine[engine + version] = true;
break;
}
}
return {name: engine, version: version};
};
Browser.detect();
Browser.Request = function(){
return $tryCatch(function(){
return new XMLHttpRequest();
}, function(){
return new ActiveXObject('MSXML2.XMLHTTP');
}, function(){
return new ActiveXObject('Microsoft.XMLHTTP');
});
};
Browser.Features.xhr = !!(Browser.Request());
Browser.Plugins.Flash = (function(){
var version = ($tryCatch(function(){
return navigator.plugins['Shockwave Flash'].description;
}, function(){
return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
}) || '0 r0').match(/\d+/g);
return {version: parseInt(version[0] || 0 + '.' + version[1], 10) || 0, build: parseInt(version[2], 10) || 0};
})();
function $exec(text){
if (!text) return text;
if (window.execScript){
window.execScript(text);
} else {
var script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
script[(Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerText' : 'text'] = text;
document.head.appendChild(script);
document.head.removeChild(script);
}
return text;
};
Просто включите этот класс JavaScript, и вы сможете обнаружить IE6 и любой другой браузер, использующий движок Trident4, выполнив следующие действия:
if(Browser.Engine.trident4) {
alert('IE6 or similar...');
} elseif(Browser.Engine.name == "trident") {
alert('Internet Explorer Trident Rendering Engine Version ' + Browser.Engine.version);
}
Рискуя не ответить на заданный вопрос (и предположив на мгновение, что у спрашивающего есть веская причина специально обнаружить IE6):
if (/\bMSIE 6/.test(navigator.userAgent) && !window.opera) {
// yep, browser claims to be IE6
}
Очень позднее добавление.
В дополнение к условным комментариям HTML, используемым в ответе аппхакера , реализация Microsoft JScript также предоставляет условные комментарии для JavaScript :
<script type="text/javascript">
var isIE6 = /*@cc_on/*@if(@_jscript_version<=5.6)1@else@*/0/*@end@*/;
if (isIE6) {
alert("You're screwed");
}
</script>
Хорошая новость в том, что что его также можно использовать во внешних файлах JavaScript ( .js
).
Для таблицы, в которой перечислены версии JScript, которые реализуются хост-приложениями Microsoft: Информация о версии JavaScript