Colorbox не загружается должным образом в IE - PullRequest
8 голосов
/ 14 ноября 2011

Я нашел решение, но оно не самое лучшее, поэтому я все еще ищу решение.См. Мой ответ за то, что я сделал.


ОБНОВЛЕНИЕ - Моя ошибка повторяется, как описано ниже, НО, если я открою Инструменты разработчика IE, ошибка исчезнет!Если я закрою браузер и снова открою, ошибка снова появится!

ОБНОВЛЕНИЕ 2 - Я попытался вставить следующий код в мой JS, чтобы посмотреть, решит ли это проблему, но это не так:

if (!("console" in window) || !("firebug" in console)) {
  var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
  window.console = {};
  for (var i = 0, len = names.length; i < len; ++i) {
    window.console[names[i]] = function(){};
  }
}

И затем это:

var console = {};
console.log = function(){};

Я также сканировал свои файлы JS и никогда не сталкивался с функцией console.log, которая вызывала бы ошибку.


Это запутанная проблема, и я сделаю все возможное, чтобы объяснить.Я устанавливаю файлы cookie на странице, которая будет отображать лайтбокс при первом посещении.Он отлично работает в FF, Chrome и т. Д., Но не в IE.

В IE происходит сценарий для вызова моего лайтбокса (colorbox), но я вижу только вращение AJAX Loader и содержимое никогдагрузы.Я понял, что сценарий запускается слишком рано.Я использовал $j(document).ready(function() Я переключился на: $j(window).load(function(), и все, казалось, было в порядке, и это работало должным образом, пока я не начну с другой страницы и не зайду на страницу, упомянутую выше.

Если я начну на любой другой странице и нажму на ссылку, у меня возникнет та же проблема!Файл cookie работает правильно и не запускает окно во второй раз.

Другими словами, если я удаляю куки и начинаю со страницы с проблемой, то нет проблемы. НО , если я начну с любой другой страницы (с очищенными файлами cookie) и перейду на вышеуказанную страницу, палитра цветов не загружается должным образом.

Из того, что я могу сказать, $j(window).load(function() работает неправильно.

Я не получаю ошибок от IE.Я использую IE 8 для тестирования и не могу проверить 9, так как я использую Windows XP.(Мне сказали, что он отлично работает в IE 9, но я не подтвердил это) Сценарий находится в <head> моего документа.(Если я переместлю скрипт в <body>, он полностью сломает страницу.)

Я читал о проблемах с DOCTYPE, которые не были правильными, или о сокращениях и проблемах с цветом в IE.Мой DOCTYPE следующий, который должен быть правильным:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

Любые мысли или идеи очень ценятся!

Вот мой код, который я использую:

Javascript

var $j = jQuery.noConflict();
$j(window).load(function() {
  //window.onload = function() does not function properly either...
  if(!$j.cookie('gallerycookie')){
    $j.colorbox({
      inline:true, 
      href:"#gallery-nav-instruct"
    });
    $j.cookie("gallerycookie", 1, {
      expires: 30, 
      path: '/'
    });
  }
});

HTML

<div style="display:none">
  <div id="gallery-nav-instruct">
    <h2>Gallery Navigation Instructions - Step 1</h2><h2 style="text-align:right">
      <a style="text-align:right;" class="inline cw" href="
         #gallery-enlarge-instruct">Step 2</a></h2>
    <p>&nbsp;</p>
    <p class="white"><img src="/Images/Pages/gallery-navigation.jpg" width="890" height="450" alt="Gallery Navigation Instructions" /></p>
  </div>
</div>

<div style="display:none">
  <div id="gallery-enlarge-instruct">
    <h2>Gallery Navigation Instructions - Step 2</h2>
    <p>&nbsp;</p>
    <h2><a class="inline cw" href="#gallery-nav-instruct">Step 1</a> </h2>
    <p class="white"><img src="/Images/Pages/gallery-enlarge.jpg" width="890" height="510" alt="Gallery -Enlarged View Instructions" /></p>
  </div>
</div>

Еще одно примечание: я использую jAlbum на странице и не вижу конфликтов, но могубыть проблемой?Я не могу опубликовать этот код здесь, так как он превысил бы предел для SO.

Чтобы вызвать эту ошибку, начните с этой страницы , появится лайтбокс.Нажмите Message Examples (нижний левый угол лайтбокса или первый элемент в меню без лайтбокса).

Вот прямая ссылка на страницу , если это необходимо.(Переход на страницу напрямую не вызовет ошибку.)

Я попытался использовать window.onload = function(), и возникла та же проблема.

Я попытался использовать обработчик событий, чтобы один раз запустить скриптdiv был загружен, что даже не запустило скрипт.вот этот код:

var $j = jQuery.noConflict();
$j('#gallery-nav-instruct').load(function() {
  if(!$j.cookie('gallerycookie')){
    $j.colorbox({
      inline:true, 
      href:"#gallery-nav-instruct"
    });
    $j.cookie("gallerycookie", 1, {
      expires: 30, 
      path: '/'
    });
  }
}); 

Ответы [ 4 ]

7 голосов
/ 22 ноября 2011

Причина, по которой он исчезает, когда вы открываете инструменты для разработчиков, заключается в том, что IE плохо работает с любыми операторами console.log, пока вы не откроете инструменты для разработчиков. Где-то должен быть файл console.log. Это может быть любой файл плагина или файл JavaScript, который вы используете. Это убивает javascript, который бежит за ним по некоторым причинам. Открытие инструментов разработчика распознает console.log как функцию javascript (моя лучшая догадка), и поэтому он неожиданно работает.

3 голосов
/ 07 мая 2012

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

Кажется, моя версия colorbox, ColorBox v1.3.19.2вернуть какой-то консольный объект.Вероятно, поэтому проблема исчезнет, ​​как только вы откроете панель инструментов для разработчиков.

Мое решение состояло в том, чтобы изменить последний оператор в сценарии colorbox (может использоваться как для разработки, так и для минимизированной версии).Сценарий заканчивается на

}(jQuery, document, this, console));

, который я заменил на

}(jQuery, document, this, null));

и теперь у меня все работает.

1 голос
/ 26 ноября 2011

Я, кажется, решил эту проблему, хотя все еще немного озадачен тем, почему произошла ошибка.Я объясню, что я сделал:

Сначала я использую Teamplates Dreamweaver для создания своей веб-страницы.Таким образом, мой код выглядит примерно так:

<head> 
Template Content for head section then
<!-- TemplateBeginEditable name="head" -->
Content outside of template that goes in head section.
<!-- TemplateEndEditable -->
</head>
<body>
Template Content for Body
<!-- TemplateBeginEditable name="ContentArea" -->
Page or body content not inside template.
<!-- TemplateEndEditable -->
More Template Content for Body
</body>

Первоначально мои скрипты находились внутри раздела head, если я помещал их прямо перед закрывающим тегом body, он ломал страницу.Что я сделал, так это изменил расположение кода.Я поместил HTML-код Lightbox в самом верху секции <body>, а затем скрипт для вызова лайтбокса прямо под ним, но над содержимым страницы в разделе body, и это сработало!Если кто-то может объяснить, почему это сработало, и может помочь мне понять, почему это не сработало в голове, пожалуйста, скажите.

0 голосов
/ 28 ноября 2011

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

  • Создайте новую функцию setCookieAfterFirstView и вызовите $j.cookie вызов внутри этой функции
  • Вызов setCookieAfterFirstView функция при onComplete обратном вызове colorbox.

Таким образом, вы можете быть уверены, что никакие другие вызовы не будут конфликтовать с открытием colorbox.Может быть, есть проблема jQuery о конфликте различных плагинов друг с другом, я просто догадываюсь сейчас ..

var $j = jQuery.noConflict();

var setCookieAfterFirstView: function() {
    $j.cookie("gallerycookie", 1, {
        expires: 30,
        path: '/'
    });
};

$j(window).load(function() {
    //window.onload = function() does not function properly either...
    if (!$j.cookie('gallerycookie')) {
        $j.colorbox({
            inline: true,
            href: "#gallery-nav-instruct",
            onComplete:function() { setCookieAfterFirstView(); }
        });
    }
});

Можете ли вы попробовать это и написать комментарий к этому ответу, решил ли он проблему илинет?

...