Не работает window.onload в IE8 - PullRequest
       2

Не работает window.onload в IE8

0 голосов
/ 14 августа 2011

У меня есть довольно простой переключатель изображений, который я использую для ручного переключения изображений и для карусели. В IE 8 это работает странно. В карусельном сценарии изображение переключается только один раз, после чего оно умирает. Но (!), Когда я реализовал Firebug Lite и попытался отследить - он работает хорошо, только с firebug на ... Я попробовал некоторые трюки, я нашел, но это все без цели. Я понятия не имею, что вызвало такое поведение. Как это исправить?

JS

function toSlide(wrapper, options){
    var active = $('#' + wrapper + ' div.active');
    var slide;
    var direction;

    if (active.length === 0){
        active = $('#' + wrapper + ' div:last');
    }

    if (options === null) {
        options = {};
        options.reverse = false;
        options.animate = false;
    } else {
        options.reverse = options.reverse === null ? false : options.reverse;
        options.animate = options.animate === null ? false : options.animate;
    }

    direction = options.reverse === true ? active.prev() : active.next();

    slide = direction.length ? direction : $('#' + wrapper + ' div:first');

    if (options.animate === true){
        active.addClass('last-active');

        slide.addClass('active')
            .css({opacity:0.0})
            .animate({opacity:1.0}, 1000, function() {            
                active.removeClass('active last-active');
        });
    } else {        
        slide.addClass('active');
        active.removeClass('active');
    }
}

function startSlideShow() {
    setInterval(function(){ toSlide('slideshow', {'animate': true}); }, 5000);
};

window.onload = function() {  
    if (document.location.pathname == '/'){startSlideShow();};
};

HTML в голове

<!--[if IE 8 ]>  
<link rel="stylesheet" href="{{ MEDIA_URL }}css/ie8.css" type="text/css" media="screen, projection" />  <html lang="en" class="no-js ie8"> 
<script defer src="ie_onload.js"></script>
<script>!window.jQuery && document.write(unescape('%3Cscript src="{{ MEDIA_URL }}js/jquery-1.6.2.js"%3E%3C/script%3E'))</script> 
<script type="text/javascript" src="http://fbug.googlecode.com/svn/lite/branches/firebug1.3/content/firebug-lite-dev.js"></script>
<![endif]-->

в нижней части HTML

<!-- Grab Google CDN's jQuery. fall back to local if necessary -->
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<!-- <script>!window.jQuery && document.write(unescape('%3Cscript src="{{ MEDIA_URL }}js/jquery-1.4.2.js"%3E%3C/script%3E'))</script> -->

<!-- scripts concatenated and minified via ant build script-->
<script src="{{ MEDIA_URL }}js/plugins.js"></script>
<script src="{{ MEDIA_URL }}js/script.js"></script>
<!-- end concatenated and minified scripts-->

Ответы [ 2 ]

1 голос
/ 14 августа 2011

Доступ к console в FF без открытого Firebug или в IE приведет к ошибке, которая заблокирует выполнение остальной части вашего JS. Если вы хотите оставить вызовы на console in, вы должны реализовать их следующим образом:

try { console.log('blah'); } catch(e) {}
// or
if (typeof console != 'undefined') console.log('blah');

Или используйте пользовательскую встроенную функцию ведения журнала, которая реализует что-то вроде вышеупомянутого.

0 голосов
/ 15 августа 2011

Причиной была неисправность window.onload в IE8. Я сделал правильный трюк, но сделал глупую ошибку. Итак, я исправил это:

был

<!--[if IE 8 ]>
    <script defer src="ie_onload.js"></script>
<![endif]-->

сейчас

<!--[if IE 8 ]>  
    <script defer src="{{ MEDIA_URL }}js/ie_onload.js"></script>
<![endif]-->

в ie_onload.js

document.body.onload = function() {
    imageViewer();
    // and other functions
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...