0

При создании модального всплывающего окна с использованием jquery.fancybox-1.2.6.js он работает на каждой платформе, которую я пробовал, кроме IE8, когда установлен режим совместимости.Fancybox получает javascript «не реализована» ошибка в режиме совместимости IE8

Когда модальный пытается отобразить, я получаю сообщение об ошибке «не реализовано» на странице, которая препятствует появлению модальности. Это дает номер строки (строка 207) ошибка происходит на в jquery.fancybox-1.2.6.js и это содержит следующие

$("#fancy_content")[0].style.removeExpression("height"); 

Я сделал некоторые старой школы факт, находя с предупреждения заявлений и, кажется .style работает, это функция removeExpression, которая «не реализована».

Кому-нибудь удалось обойти эту проблему?

+0

Очень мало библиотек с открытым исходным кодом предназначены для работы в режиме совместимости с IE8.Как правило, вы попадаете в режим совместимости, если вы ошиблись, кодируя свой сайт, поэтому это не сценарий, который люди пытаются поддерживать. – Domenic

ответ

1

я смог закомментировать задеть части и, кажется, теперь отлично работает для меня:

//This was causing error in IE8 in compatibility mode 
//   if (oldIE || ieQuirks) { 
//    $("#fancy_content")[0].style.removeExpression("height"); 
//    $("#fancy_content")[0].style.removeExpression("width"); 
//   } 

      if (pad > 0) { 
       width += pad * 2; 
       height += pad * 2; 

       $("#fancy_content").css({ 
        'top': pad + 'px', 
        'right': pad + 'px', 
        'bottom': pad + 'px', 
        'left': pad + 'px', 
        'width': 'auto', 
        'height': 'auto' 
       }); 

//This was causing error in IE8 in compatibility mode 
//    if (oldIE || ieQuirks) { 
//     $("#fancy_content")[0].style.setExpression('height', '(this.parentNode.clientHeight - ' + pad * 2 + ')'); 
//     $("#fancy_content")[0].style.setExpression('width', '(this.parentNode.clientWidth - ' + pad * 2 + ')'); 
//    } 

Кажется, что это странно работает без этого, но, возможно, он не будет работать для всех, в зависимости от того, как они используют fancybox ...

0

Вы уже отправили ответ, но есть что-то, что, я думаю, стоит попробовать.

.style.removeExpression - это то, что я ожидаю, что не будет реализован. Код, чтобы помочь quirksmode сделать правильный размер.

поэтому вместо

$("#fancy_content")[0].style.removeExpression("height"); 

попробовать сделать

$("#fancy_content").height('auto') 

и позже

$("#fancy_content").height($(window).height() - pad * 2); 

То же самое с шириной.

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

0

Я Ковами это старый вопрос, но вот мои два цента для потомства ...

Я побежал в то же самое проблема, когда я обновил свои сайты с версии 1.4.2 до версии 1.8.3 jQuery. Проблема, кажется, в том, как фантазии поле определяется, если boxModel присутствует, с помощью этого кода:

ieQuirks = $.browser.msie && !$.boxModel;

В новых версиях JQuery $ .boxModel возвращает неопределенное (оно осуждается в 1.3), которая является falsey , что возвращает значение true для всех браузеров. Использование $ .support.boxModel вместо $ boxModel Устранена проблема для меня:

ieQuirks = $.browser.msie && !$.support.boxModel;

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