6

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

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

  • CSS3Pie [source code] является поведение Internet Explorer (HTC), который добавляет поддержку свойств CSS3, как границы радиуса, градиенты и т.д.
  • Катастрофа происходит только в IE8, а не IE7 или ранее.
  • Ошибка произошла только в Prototype 1.6.1 [source code], а не Prototype 1.6.0.x
  • Аварийная ситуация происходит сразу же при загрузке страницы, я даже не могу взаимодействовать со страницей.
  • Разработчик осведомлен о проблеме, но поскольку он считает, что это проблема прототипа (может быть), он, возможно, не захочет ее исправить. Есть как forum post, так и GitHub bug report, но не добавляют много информации.
+1

Вы пробовали выпуск 1.7 прототипа, который должен быть выпущен в ближайшее время – robjmills

+0

Прототип 1.7_rc2 работает. Не собираюсь использовать RC в производстве, но я полагаю, я могу просто подождать. –

+0

У вас есть набор Content-Type для 'htc' и следуйте правилам одного домена? – rxgx

ответ

5

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

1

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

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)); 
})(); 
Смежные вопросы