Предупредить пользователей старых браузеров, которые не поддерживают новые стандарты CSS3 - PullRequest
3 голосов
/ 03 января 2012

Я пытаюсь перенаправить старые браузеры, которые не поддерживают CSS3 или iFrames, на страницу с предупреждением, где я объясняю, что они могут испытывать проблемы со своими старыми браузерами, если они продолжат.

Скрипт (или иным образом) должен проверять совместимость css3, а не идентификатор браузера.

Баннер, который отображается в верхней части страницы, если пользователь просматривает старый браузер, также будет приемлемым.

Я сейчас использую: <!--[if lt IE 9]><div style=' clear: both; height: 200px; padding:0 0 0 15px; position: relative;'><a href="old"><img src="old-browser.jpg" border="0" height="153" width="659" alt="" /></a></div><![endif]-->

Есть ли у кого-нибудь опыт с этим или ссылка на пример? Благодаря.

Ответы [ 3 ]

6 голосов
/ 04 января 2012

Тестирование версии браузера - ненадежный метод - многие пользователи не предоставляют эту информацию, а другие говорят вам, что они используют другой браузер, чем на самом деле.Если вам нужны определенные функции, то единственный надежный способ определить, доступны ли они, - это использовать javascript, чтобы увидеть, существуют ли они.

Вы полны решимости перенаправить, а не просто изменить то, что отображается?Потому что изменить содержимое текущей страницы будет гораздо проще.Просто добавьте что-то вроде этого на свою страницу:

<div id='warning'>Your browser sucks!</div>

CSS:

#warning {
  /* make this DIV very visible - you could even cover the rest
     of the page if your website is useless without javascript. */
}

Теперь страница загрузится с отображенным #warning, и вы можете использовать javascript, чтобы скрыть ее, если требуетсяфункции присутствуют (вы не хотите делать обратное и использовать javascript для его отображения, потому что вы хотите, чтобы он отображался, если ваш скрипт не запускается).Есть много способов сделать это, и самый «стандартный» способ - это присоединить событие onload.Тем не менее, это одна из ситуаций, когда я считаю, что хакерский подход намного лучше.Если вы выполните тест под нагрузкой, то предупреждение будет отображаться до тех пор, пока не будет выполнен javascript, который может составлять от доли секунды до нескольких секунд.Что вы действительно хотите сделать, так это скрыть элемент до того, как он будет отображен, и вы можете сделать это, добавив что-то подобное в раздел <head>.

if((function() {
  var t,u,i,j,
    css='textShadow,textStroke,boxShadow,borderRadius,borderImage,opacity'.split(','),
    prefixes=',webkit,moz,o,ms,khtml'.split(','),
    nPrefixes=prefixes.length,
    el=document.createElement('i').style;
  styles:for(i=0;t=css[i];i++) {
    t=t.charAt(0).toUpperCase()+t.substr(1);
    for(j=0;j<nPrefixes;j++) {
      u=prefixes[j]+t;
      if(el[u.charAt(0).toLowerCase()+u.substr(1)]!==undefined)
        continue styles;
    }
    return false;
  }
  return true;
})())
  document.write("<style type='text/css'>#warning {display:none;}</style>");

Согласно вашему примеру, это предполагает, чтонеобходимыми вам функциями являются textShadow, textStroke, boxShadow, borderRadius, borderImage и opacity.

Вы действительно не должны помещать любой другой javascript в <head>, так как страница не будет отображаться до тех пор, покаприведенный выше код завершает выполнение.

2 голосов
/ 04 января 2012

Grab Modernizr и создайте версию со всеми необходимыми вам функциями.Откройте файл modernizr и добавьте что-то вроде этого

if(Modernizr.borderradius && Modernizr.cssgradients && Modernizr.textshadow) { var valid = true; var
expires = new Date(); expires.setDate(expires.getDate() + 31); document.cookie = 'browser=modern;
expires='+expires.toUTCString()+'; path=/'; } else { var valid = false; }

Замените тестируемые функции (например, Modernizr.borderradius), которые я приведу в примере, на ваш собственный, используя документацию Modernizr.Я добавляю куки-файл пользователю, если его браузеры совместимы, поэтому я могу отфильтровать его, показывая код с помощью php.

Затем добавьте этот div и javascript вверху, прямо под тегом body.Javascipt использует jquery, чтобы скрыть элемент, но вы можете использовать другие примеры, показанные здесь, чтобы сделать это только с javascript.

<div id="warning_block">
Warning! You are viewing this page in a non compatible browser.
</div>
<script type="text/javascript">
if (valid == false) { $("#warning_block").show(); }
</script>

Вы также можете включить CSS для стилизации, так что это выглядит как предупреждение

#warning_block {
display: none;
width: 80%;
border: 1px solid #000;
background: #F00;
color: #FFF;
font-family: arial;
text-align: center;
margin-top: 5px;
margin-left: auto;
margin-right: auto;
padding: 5px;
}
0 голосов
/ 03 января 2012

шаг 1 - определить версию вашего браузера с помощью javascript или парсинга заголовка запроса на коде на стороне сервера.

шаг 2 - если версия не поддерживается, перенаправьте на страницу предупреждения.

(но CSS3 и HTML 5 широко не поддерживаются).

...