Почему CSS3Pie + Prototype 1.6.1 дает сбой Internet Explorer 8 - PullRequest
6 голосов
/ 19 июля 2010

Я пытаюсь понять, почему Css3Pie, используемый вместе с Prototype 1.6.1, аварийно завершает работу Internet Explorer 8. Почему это происходит?

Соответствующая информация

  • CSS3Pie [ исходный код ] - это поведение Internet Explorer (htc), которое добавляет поддержку свойств CSS3, таких как border-radius, градиенты и т. Д.
  • Сбой происходит только в IE8, а не в IE7 или более ранних версиях.
  • Сбой происходит только в Prototype 1.6.1 [ исходный код ], а не в Prototype 1.6.0.x
  • Сбой происходит сразу при загрузке страницы, я даже не могу взаимодействовать со страницей.
  • Разработчик знает об этой проблеме, но, поскольку он считает, что это проблема с прототипом (может быть), он, возможно, не захочет ее устранить. Есть и сообщение на форуме и Отчет об ошибке GitHub , но ни один не добавляет много информации.

Ответы [ 2 ]

5 голосов
/ 21 января 2011

Этот сбой IE8 , который, по-видимому, был исправлен в недавнем обновлении Windows, был вызван изменением Прототипа прототипов объектов DOM с последующим применением поведения CSS3Pie. В Protoype 1.6.1 это можно обойти, установив ElementExtensions и SpecificElementExtensions в false для объекта Prototype.BrowserFeatures и изменив функцию checkDeficidity для немедленного возврата true.

1 голос
/ 24 мая 2012

Это хорошее начало, но затем оно перестает работать в других браузерах (например, Firefox, Chrome). Вместо этого вы должны добавить в начале каждой функции (ElementExtensions, SpecificElementExtensions, checkDeficidity) проверку для IE 8, затем вернуть false для анонимных функций Extensions и вернуть true для функции checkDeficidity.

ElementExtensions: (function() {
 if (isIE8) return false;
...

SpecificElementExtensions: (function() {
 if (isIE8) return false;
...

function checkDeficiency(tagName) {
 if (isIE8) return true;
...

var isIE8 = (function(){
    return ((navigator.userAgent.indexOf('MSIE')!=-1) && (document.documentMode==8));
})();
...