2012-01-06 6 views
3

Извините, это почти наверняка дубликат, но я искал StackOverflow и не смог найти ответ. Надеюсь, если я сформулирую это в самых общих терминах, я могу, это поможет кому-то еще в будущем.Загрузка и выполнение скриптов только в поддерживаемых браузерах?

Я включаю некоторые скрипты на своей веб-странице, которые отлично работают в Chrome/FF/Opera/Safari/IE9, но не совместимы с IE8 или ниже (для информации, это потрясающий D3.js).

Как я могу использовать, чтобы страница не удалась изящно в IE < 9?

В идеале я предпочел бы для IE < 9 пользователей

  • не загружать D3.js внешние скрипты на всех и
  • , чтобы показать им сообщение «К сожалению, это не будет работать для вас» в мой сценарий страницы, вместо того, чтобы пытаться использовать библиотеки D3 и вызывать ошибку JavaScript.

Текущий код в HTML-странице:

<script type="text/javascript" src="/js/d3.js"></script> 
<script type="text/javascript" src="/js/mylocal.js"></script> 

И в файле JavaScript, от открытия линии:

var vis = d3.select("#vis") 
.append("svg:svg") 
.attr("width", w) 
.attr("height", h) 
.append("svg:g"); 
// etc 

Как я должен изменить это, чтобы убедиться, что только браузеры, поддержка D3 будет загружаться и пытаться ее выполнить?

+0

Отключить их загрузку можно сделать так: http://css-tricks.com/how-to-create-an-ie-only- stylesheet/ – OptimusCrime

+1

как об обнаружении признаков для поддержки svg, а затем ленивой загрузке библиотеки? – Burntime

+0

@Burntime на самом деле это было бы предпочтительнее, я думаю, потому что он будет обрабатывать любые другие браузеры, которые не выполняют SVG. – Richard

ответ

6

Вы должны использовать IE conditional comments:

<!--[if lt IE 9]> 
<p>Sorry, this won't work for you</p> 
<![endif]--> 

<!--[if gt IE 8]><!--> 
<script type="text/javascript" src="/js/d3.js"></script> 
<script type="text/javascript" src="/js/mylocal.js"></script> 
<!--<![endif]--> 
+0

Просто для сохранения щелчка, вот пример: ' ' – speeves

0
function getIEVersion(){ 
    var ua = window.navigator.userAgent; 
    var msie = ua.indexOf ("MSIE "); 

    if (msie > 0)  
     return parseInt(ua.substring(msie+5, ua.indexOf (".", msie))); // If Internet Explorer, return version number 
    else     
    return 10; // If another browser, return 10 
} 

if(getIEVersion() < 9){ 
    alert("Sorry, this won't work for you"); 
}else{ 
    <script type="text/javascript" src="/js/d3.js"></script> 
    <script type="text/javascript" src="/js/mylocal.js"></script> 
} 
+0

не сработает, предположим, что вы были в FF, вы тоже получите предупреждение, так как ваша функция синтаксического анализа возвращает 0 (<9) для не-томов браузеров – canihavesomecoffee

+0

обновлено .. надеюсь, что это сработает сейчас :) –

Смежные вопросы