пятница, 28 января 2011 г.

Как обновить favicon.ico в Firefox

Иногда, встречается проблема обновления favicon.ico для Firefox, из-за чего трудно протестировать его при редизайне. Даже после сбрасывания кеша, Firefox часто продолжает отображать старый favicon. В таком случае, помогает такой прием:

зайдите на корневую страницу сайта (например http://www.mysite.com/), после чего перейдите по прямой ссылке на ваш фавикон: http://www.mysite.com/favicon.ico

После чего, в окне браузера отобразится обновленная картинка фавикона. Дальше, перейдите назад на корневую страницу вашего сайта и вы увидите что фавикон обновился успешно.

Для очистки кеша, куки и т.д. в Firefox - нажмите Right Ctrl+Right Shift+Del, выберите нужные галочки, период времени за которое нужно все очистить и нажмите "Очистить сейчас". Комбинация работает в IE8+, Chrome


среда, 12 января 2011 г.

Проверка версии браузера с помощью htaccess

Постановка задачи: 
Необходимо перенаправлять пользователей, которые используют устаревшие браузеры на специальную информационную страницу.

Решение: 
Такая задача возникает, если вы отказываетесь поддерживать старые версии браузеров и тратить на них время. Создаем html страницу, на которой выводим информацию, о том, что браузер пользователя устарел, и новую версию можно скачать перейдя по ссылке(ам).

Задачу можно решить с помощью javascript (пример реализации использует jquery), создаем javascript файл и подключаем его в главный шаблон сайта:

jQuery(document).ready(function(){
  if(jQuery.browser.msie && jQuery.browser.version < 7){
    location.href("update-browser.html");
  }
});


Тут проверка проводится для ИЕ6, но не составит труда дописать проверку для других браузеров.

В таком подходе есть негативная сторона - необходима поддержка javascript, небольшая задержка на его выполнение и дополнительный редирект на инфо-страницу. Для избежания всего этого можно осуществлять проверку на уровне Апача, в правилах htaccess.

Пример:

RewriteCond %{HTTP_USER_AGENT} MSIE\ ([56])\.
RewriteRule !\.(css|png|js|gif)$ update-browser.html [L]

С первой строкой все ясно: тут определяем версию ИЕ. Вторая строка заставляет редиректить пользователся на страницу с информацией во всех случаях, кроме тех когда загружаются картинки, стили и скрипты. Если не исключать такие файлы по маске - тогда никогда не подгрузится оформление страницы update-browser.html.

Для остальных браузеров похожие правила:

RewriteCond %{HTTP_USER_AGENT} Firefox/2.* # Firefox > 2
RewriteCond %{HTTP_USER_AGENT} Safari/[0-3] # Safari > 3
RewriteCond %{HTTP_USER_AGENT} Opera/[0-9] # Opera > 9
...

воскресенье, 26 декабря 2010 г.

jQuery установить значение атрибута type для браузера IE

В последней версии jQuery (1.4.x), при изменении атрибута type в Internet Explorer (IE) бросается (throw) исключение (запрещено его изменять).

В стеке ошибок, браузер показывает, что jQuery бросает исключение, которое нигде не обрабатывается. Чтобы его отловить, можно использовать код:


try {
  jQuery("input").attr('type','text');
} catch(e) {
  alert(e.message)
}

Как решение проблемы, многие предлагают использовать jQuery('...').data('element','key','value'), но наверное проще избегать самой ситуации изменения типа поля.

Чаще всего, такая необходимость возникает, если нужно склонировать поле и потом заставить вести себя иначе (например склонировать поле пароля и установить клону тип - текст). Под другими браузерами все будет отлично, а под ИЕ получите ексепшин. Я предпочтаю, в таком случае, не клонировать поле, а создавать - уже с нужным типом и потом выставлять остальные параметры. Но можно и использовать вариант с jQuery.data()

вторник, 21 декабря 2010 г.

Rails. Установка под windows7. Решение типовой проблемы

Если при установке рельсы под windows7 вылазит такая ошибка:

ERROR: While executing gem ... (Errno::ENOENT)

No such file or directory ...

Заходим в папку с установленым Ruby (C:/Ruby например), находим в папке bin файл gem и вставляем в его начало:

ENV['HOME'] = "C:/Ruby"

или ваш уникальный путь к Ruby.

понедельник, 6 декабря 2010 г.

пятница, 26 ноября 2010 г.

четверг, 18 ноября 2010 г.

Как работает Array.prototype.slice.call

Для того, чтобы из аргументов JavaScript функции "отрезать" первые Х значений, используется метод slice:

Array.prototype.slice.call(arguments, X);

Например такая функция вернет "3,4":

(function(){
  var args = Array.prototype.slice.call(arguments, 2);
  alert(args); // Returns: 3,4
})(1, 2, 3, 4);


Используется вызов через Array.prototype.call(array, params)  потому, что arguments - псевдо-массив и не содержит методов прототипа массива. С помощью call мы явно вызываем нужный метод из прототипа Array с контекстом arguments.

Таким образом, такой подход используется когда нужно срезать входящие параметры функции JavaScript.