Автор Тема: Проблема в отображении элемента сообщения "Читать далее" в Chrome  (Прочитано 3967 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн devnull

  • Ветеран
  • *****
  • Сообщений: 745
    • Просмотр профиля
Я единственный, у кого в браузере Google Chrome элементы "Читать далее" отображаются плохо - они всегда имеют высоту в пару десятков пикселов что в свернутом, что в развернутом виде? В результате читать их становится очень трудно, а картинки, спрятанные внутри, смотреть вообще невозможно. Если это только у меня так, тогда ладно. Если же у кого-нибудь еще те же проблемы, то хорошо бы их решить.
На всякий случай сообщаю, что проблема вызвана кодом функции smf_codeFix() в index.template файле, она при загрузке страницы вычисляет размер всех таких элементов и фиксирует их (у меня - в 32 пиксела, зависит от размера основного шрифта).

Оффлайн waleriy

  • Постоялец
  • ***
  • Сообщений: 228
    • Просмотр профиля

Оффлайн devnull

  • Ветеран
  • *****
  • Сообщений: 745
    • Просмотр профиля
Мне бы хотелось глянуть на код из файла index.template.php, который идет после вот этого комментария:
// This is an interesting bug in Internet Explorer AND Safari. Rather annoying, it makes overflows just not tall enough.
Интересует в первую очередь первый if и затем условие того if, после которого выводится вот такая функция smf_codeFix():
function smf_codeFix()
{
var codeFix = document.getElementsByTagName ? document.getElementsByTagName("div") : document.all.tags("div");

        for (var i = 0; i < codeFix.length; i++)
{
         if ((codeFix[i].className == "code" || codeFix[i].className == "post" || codeFix[i].className == "signature") && codeFix[i].offsetHeight < 20)
codeFix[i].style.height = (codeFix[i].offsetHeight + 20) + "px";
}
}

PS. waleriy, можно решить эту проблему локально, достаточно поменять строку user-agent, чтобы браузер не опознавался как chrome. Разумеется, это решение имеет и свои недостатки. Если администраторы проявят взаимность, то можно будет решить эту проблему на стороне сервера.
« Последнее редактирование: 10 Март 2012, 02:52:41 от devnull »

Оффлайн waleriy

  • Постоялец
  • ***
  • Сообщений: 228
    • Просмотр профиля
PS. waleriy, можно решить эту проблему локально, достаточно поменять строку user-agent, чтобы браузер не опознавался как chrome. Разумеется, это решение имеет и свои недостатки. Если администраторы проявят взаимность, то можно будет решить эту проблему на стороне сервера.
Если бы мне была знакома эта сторона жизни браузера, то я давно бы ему все "вывернул"

Оффлайн devnull

  • Ветеран
  • *****
  • Сообщений: 745
    • Просмотр профиля
Если бы мне была знакома эта сторона жизни браузера, то я давно бы ему все "вывернул"
Открываете свойства ярлыка Chrome. В поле "Объект" указан путь к исполнимому файлу chrome.exe. Дописываете после него через пробел --user-agent="Firefox":



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

Оффлайн ptil

  • Администратор
  • Эксперт
  • *****
  • Сообщений: 3091
    • Просмотр профиля
    • E-mail
Мне бы хотелось глянуть на код из файла index.template.php
Прикрепляю сам файл.
Если сможете побороть этот глюк, все пользователи Хрома будут вам благодарны :)

Оффлайн waleriy

  • Постоялец
  • ***
  • Сообщений: 228
    • Просмотр профиля
devnull спасибо! Заработало. :beer:
Вы еще писали о недостатках - как они проявятся?

Оффлайн waleriy

  • Постоялец
  • ***
  • Сообщений: 228
    • Просмотр профиля
Один недостаток выявлен.
После перезапуска Chrome даже с добавленной записью, все возвращается (неправильное отображение "читать далее")

Оффлайн devnull

  • Ветеран
  • *****
  • Сообщений: 745
    • Просмотр профиля
Прикрепляю сам файл.
Спасибо. Сразу стало ясно, что ошибка в том, что движок Simple Machine Forum неправильно распознает браузер Chrome - он опознает его как Safari. Код распознавания браузеров находится в другом файле. Я скачал себе исходники smf и нашел место с ошибкой. Откройте файл Load.php и найдите в нем строку со следующим комментарием (в версии 1.1.16 это строка номер 1329):
// The following determines the user agent (browser) as best it can.
Ниже идет следующий код:
$context['browser'] = array(
       строки, которые нас не интересуют
       'is_safari' => strpos($_SERVER['HTTP_USER_AGENT'], 'Safari') !== false,
       строки, которые нас не интересуют
);
А вот сюда надо будет дописать две строки кода, показанные ниже.
Удалите целиком эту одну строчку с 'is_safari', а после этого куска кода допишите следующие две строки:
$context['browser']['is_chrome'] = strpos($_SERVER['HTTP_USER_AGENT'], 'AppleWebKit') !== false && strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome') !== false;
$context['browser']['is_safari'] = !$context['browser']['is_chrome'] && strpos($_SERVER['HTTP_USER_AGENT'], 'Safari') !== false;
Вот и все.

Вы еще писали о недостатках - как они проявятся?
Один недостаток выявлен.
После перезапуска Chrome даже с добавленной записью, все возвращается (неправильное отображение "читать далее")
Это вы что-то неправильно сделали, после перезапуска все должно работать. Возможно, вы воспользовались не тем ярлыком для запуска Chrome. Например, вы исправили ярлык на рабочем столе, а запустили его потом с панели быстрого доступа. Недостаток заключается в следующем: подделка user-agent приводит к тому, что браузер будет неправильно опознаваться скриптами на сервере. В результате сервер может сгенерировать неправильный код. В принципе странички, отсылаемые сервером для разных браузеров, никак не связаны друг с другом. Например, очень легко написать страничку, на которой пользователи Internet Explorer увидят, что на выборах победил Путин, пользователи Firefox - что победил Прохоров, а пользователи Chrome просто увидят прогноз погоды на завтра. Обычно скрипты на сервере написаны так, что странички в разных браузерах выглядят одинаково, но это не всегда так. Например, главная страничка Google выглядит по-разному в Chrome и в том же Chrome, но с --user-agent="Firefox". Меняется дизайн кнопок, исчезает кнопка для голосового поиска, но вместо этого появляется Advanced search и т.д. Сравните сами:

Оффлайн ptil

  • Администратор
  • Эксперт
  • *****
  • Сообщений: 3091
    • Просмотр профиля
    • E-mail
Удалите целиком эту одну строчку с 'is_safari', а после этого куска кода допишите следующие две строки:
Готово, проверяйте

Оффлайн devnull

  • Ветеран
  • *****
  • Сообщений: 745
    • Просмотр профиля
 Большое спасибо, теперь проблем с отображением нет.

Оффлайн ptil

  • Администратор
  • Эксперт
  • *****
  • Сообщений: 3091
    • Просмотр профиля
    • E-mail
Это вам спасибо :thumbs up:

Оффлайн waleriy

  • Постоялец
  • ***
  • Сообщений: 228
    • Просмотр профиля