Nivo Slider не работает в IE8

Я столкнулся с некоторыми проблемами со слайдером jquery nivo на веб-сайте моей компании.

Прежде всего, веб-сайт находится на хостинге компании, которая предоставила собственную CMS, в которой мы ничего не можем изменить. Вот почему у меня нет разрешений на загрузку чего-либо в Head-Tag и я не могу загружать какие-либо файлы, кроме изображений, на этот сервер.

Поэтому я нашел Javascript, который впоследствии загружает файлы CSS в голову. Что ж, все это правильно работает во всех браузерах (Chrome, FF, IE6, IE9), кроме IE8. NivoSlider загружает только первое изображение, не показывает ни подписи, ни навигации.

Я понятия не имею, почему это происходит, потому что, если я выполняю код (показан ниже) локально, он работает (все файлы также хранятся локально).

<script type="text/javascript" src="slider/scripts/jquery-1.6.1.min.js"></script>
<script type="text/javascript" src="slider/scripts/jquery.nivo.slider.js"></script>
<script type="text/javascript">
  function loadjscssfile(filename, filetype){
     if (filetype=="js"){ //if filename is a external JavaScript file
      var fileref=document.createElement('script')
      fileref.setAttribute("type","text/javascript")
      fileref.setAttribute("src", filename)
     }
     else if (filetype=="css"){ //if filename is an external CSS file
      var fileref=document.createElement("link")
      fileref.setAttribute("rel", "stylesheet")
      fileref.setAttribute("type", "text/css")
      fileref.setAttribute("href", filename)
     }
     if (typeof fileref!="undefined") {
      document.getElementsByTagName("head")[0].appendChild(fileref)
    }
    }

  function toggle() {
    var slider = document.getElementById("slider");
    slider.style.display = "block";
  }

    $(window).load(

    function() {
            loadjscssfile("slider/css/nivo-default.css", "css");
            loadjscssfile("slider/css/nivo-slider.css", "css");
            toggle();
            $('#slider').nivoSlider();

    }
    );

</script>

Хостер использует Prototype JS Framework для своей CMS, поэтому я подумал, что, возможно, это вызывает какие-то помехи. На самом деле, если я открою Devtools в IE8, я покажу некоторые ошибки в файле Prototype.js, предоставленном хостером.

var nodes = $(element).getElementsByTagName('*');
className = ' ' + className + ' ';

for (var i = 0, child, cn; child = nodes[i]; i++) {
  if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
      (classNames && classNames.all(function(name) {
        return !name.toString().blank() && cn.include(' ' + name + ' ');
      }))))
    elements.push(Element.extend(child));
}

Ему не нравятся эти строки, он говорит что-то вроде (в переводе с немецкого) "объект не поддерживает это значение или метод"

Вы можете увидеть исходную домашнюю страницу и код XXX и попробовать сами. Я надеюсь, что вы можете помочь мне с моей проблемой.


person BorisB    schedule 11.10.2011    source источник


Ответы (1)


Проверяя инструменты разработчика Chrome, единственная проблема, которую я вижу, заключается в следующем:

var nivo-child = $(this);

У вас не может быть тире в имени переменной, измените его на nivo_child или nivoChild.


Чтобы исправить вторую ошибку, вам нужно использовать jQuery.noConflict().

person thirtydot    schedule 11.10.2011
comment
извините, я поправился. Я изменил его из дочернего, потому что я думал, что это вызвало помехи. Я оставлю это сейчас для вас, ребята. - person BorisB; 11.10.2011
comment
ty, это исправило 2-ю ошибку, но все та же проблема в IE8 - person BorisB; 11.10.2011
comment
Вы неправильно используете jQuery.noConflict(). Внимательнее читайте документацию или гуглите примеры. - person thirtydot; 11.10.2011
comment
Большое спасибо, чувак, ты сделал мой день. теперь он работает в IE-8. я думаю, что теперь я правильно понял синтаксис. нужно поработать над моим jquery как можно скорее. - person BorisB; 11.10.2011