Проблемы с кроссбраузерностью





Доброго дня.
Есть сайт rattanpr.ru

Все работает хорошо только в IE.

В Mоzilla не работает функция разворачивания (открытия объекта)

Посмотрите для наглядности rattanpr.ru/catalog/design/ - попробуйде нажать на изображение (в Шу работает в mozilla - нет, только через "открыть в новой вкладке"

В Opera открытие идет, но с ошибками. На той же страничке rattanpr.ru/catalog/design/ - попробуйте открыть последнее изображение, дизайн "плывет"

Подскажите как решить или хотя бы где искать баги? В css или в скриптах или еще где.

Cпасибо
  • 23 июля 2009, 15:24
  • inanaj

Ответы (12)

RSS
+
0
В опере косяк скорее всего из-за CSS, опять же в функции _full. Похоже необходимо переписать эту функцию используя флаг jquery browser (он позволяет определить тип browser) и под оперу задать свои свойства.
avatar

ugene-h

  • 26 июля 2009, 22:57
+
0
По щелчку на картинке ничего не происходит (открываю в Firefox). Из анализа HTML кода пришёл к выводу что проблема в функции _full в следующей строке: onclick="javascript: _full(this, 2150); return false;". Судя по return false функция осуществляет открытие ссылки. Только вот искать в какой из подключенных библиотек JavaScript находится эта функция - лень. Поэтому если хочешь, найди в какой библиотеке у тебя эта функция и я может быть тебе помогу.
avatar

agatrid

  • 23 июля 2009, 10:24
+
0
Вот она, косячная функция:

function _full(obj){
if(Ar[$(obj).parent().parent().get(0).id] != true){
Ar[$(obj).parent().parent().get(0).id] = true;
$.ajax({type: "POST", url: obj.href+'?xml=true', cache: false, success: function(data){
var id = $("xml > id", data).text(), _w = 598;
_t = '';
$("#td"+id).css('display', 'none');
_t += "<td id=\"table"+id+"\"><div class=\"More\"><table><tr>";
_t += "<td><div class=\"Text\"><h1>"+($("xml > type", data).text())+" "+($("xml > name", data).text())+"</h1><p align=\"justify\">"+($("xml > description", data).text())+"</p>";
if($("xml > size", data).text() != '') _t += "\t\t\t\t<b>Дополнительная информация:</b><br>\n"+($("xml > size", data).text());
if($("xml > weight", data).text() != '') _t += "\t\t\t\t<br><b>Допустимая нагрузка:</b><br>\n"+($("xml > weight", data).text());
_t += "</div></td>";
$("xml img", data).each(function(){
_t += "<td><img src=\""+($(this).attr('src'))+"\"></td>";
_w += parseInt($(this).attr('width'));
});
_t += "<td class=\"Close\"><a href=\"#\" onclick=\"javascript: _close("+id+"); return false;\">&nbsp;</a></td></tr></table></div></td>";
$("#td"+id).after(_t);
$("html, body").animate({scrollLeft: $("#table"+id).get(0).offsetLeft}, 1000);
$("#table"+id+" > div").show("slow");
//$("html, body").animate({scrollLeft: $("#table"+id).get(0).offsetLeft}, 1000);
//$("#table"+id+" > div").animate({width: _w+"px"}, 1000);
}});}}

А теперь совет: попробуй установить последнюю библиотеку jquery в следующей строке
<script type="text/javascript" src="/.files/1/jquery.min.js"></script>
Последнюю версию можешь скачать по ссылке внизу
avatar

river1

  • 26 июля 2009, 13:34
+
0
Косяк возникает здесь:
Ошибка: $(document).mousewheel is not a function
Источник: http://rattanpr.ru/.files/1/js/func.js
Строка: 3

А вот собственно и код:
$(function(){$(document).mousewheel(function(event, delta){
if(delta > 0){
scrollBy(-100, 0);
}else if(delta < 0){
scrollBy(100, 0);
$("#Help").hide();
}});});
avatar

doctorsolberg

  • 2 августа 2009, 06:04
+
0
Нашёл в инете причину ошибки. Короче при отсылке ajax запроса методом POST в FireFox   (если данных нет) не задает в запросе значение Content-Length.

Исходя из описания в статье нужно в функции _full изменить POST запрос на GET.
Строку $.ajax({type: "POST", url: obj.href+'?xml=true', cache: false, success: function(data){
Заменить на $.ajax({type: "GET", url: obj.href+'?xml=true', cache: false, success: function(data){
avatar

qmax

  • 24 июля 2009, 20:57
+
0
Дополнение #7
Да, теперь всё работает!

Ты не поверишь, но у меня нет интернет кошелька (: Так что купи лучше своей девушке шоколадку :)

Проблемы в опере сейчас посмотрю.

Дополнение #8  

Если при изменении метода запроса POST на GET не возникает ошибок и всё работает правильно то ничего переделывать не нужно. А вот если на сервере скрипт обрабатывает только запросы POST тогда придётся переделывать (но ты бы это увидел, инфа отображалась бы не правильно, были бы сообщения об ошибках). Поэтому не парся по этому поводу!
avatar

elov

  • 2 августа 2009, 08:20
+
0
По ходу эта функция  - это расширение jquery методом mousewheel который выполняет прокрутку страницы  и скрывает содержимое с id #Help.

Попробуй как я уже говорил обновить jquery (для этого удали на сервере файл /.files/1/jquery.min.js и установи новый, который скачай по ссылке которую я дал выше).
Если проблема не решится значит нужно смотреть дальше. А проблема когда возникла? Я так понимаю раньше всё работало? Или нет?
avatar

sufzie

  • 27 июля 2009, 11:55
+
0
К сожалению сейчас нет доступа к асе :( так что пиши здесь
avatar

armale

  • 31 июля 2009, 23:25
+
0
Дополнение #6

Нет, это плагин jquery который позволяет перехватывать события колесика мыши. Загрузил сайт в firebug. После щелчка на картинке выдаёт ошибку: 411 Length Required.
avatar

igismundus

  • 24 июля 2009, 04:40
+
0
Некоторые аспекты HTTP запроса неправильны. Возможные проблемы:

Отсутствует либо неизвестен метод запроса (GET, POST)
Отсутствует URL
Отсутствует HTTP идентификатор (HTTP/1.0)
Запрос слишком велик
Не указан Content-Length для запросов POST или PUT
Недопустимый символ в имени сервера; подчеркивания недопустимы
avatar

excess

  • 1 августа 2009, 02:40
+
0
Кстати, в связи с изменением метода отправки данных на странице, возможно необходимо будет внести изменения и на сервере.
avatar

cheloveg-molekula

  • 31 июля 2009, 03:42
+
0
в css
avatar

bezgubov

  • 31 июля 2009, 10:35

Только зарегистрированные и авторизованные пользователи могут отвечать.