6

Estoy tratando de entender por qué Css3Pie se usa junto con el Prototype 1.6.1 bloquea Internet Explorer 8. ¿Por qué sucede esto?¿Por qué se bloquea CSS3Pie + Prototype 1.6.1? Internet Explorer 8

información relevante

  • CSS3Pie [source code] es un comportamiento de Internet Explorer (HTC), que añade soporte para propiedades de CSS3 como border-radius, gradientes, etc.
  • El accidente sólo ocurre en IE8, no IE7 o anterior.
  • El bloqueo solo ocurre en el prototipo 1.6.1 [source code], no en el prototipo 1.6.0.x
  • El bloqueo ocurre inmediatamente en la carga de la página, ni siquiera puedo interactuar con la página.
  • El desarrollador es consciente del problema, pero como cree que es un problema de prototipo (puede que lo sea), es posible que no esté dispuesto a solucionarlo. Hay tanto un forum post y GitHub bug report, pero tampoco agregan mucha información.
+1

has probado con la versión 1.7 de Prototype ya que * debería * ser lanzado pronto – robjmills

+0

Prototype 1.7_rc2 funciona. No voy a usar un RC en producción, pero supongo que puedo esperar. –

+0

¿Tiene el tipo de contenido configurado para 'htc' y sigue las mismas reglas de dominio? – rxgx

Respuesta

5

Este IE8 crash, que parece haber sido corregido en una actualización reciente de Windows, fue provocada por retoques de prototipo con prototipos de objetos DOM seguido de la aplicación de la conducta CSS3Pie. En el Protoype 1.6.1, se puede evitar estableciendo ElementExtensions y SpecificElementExtensions en false en el objeto Prototype.BrowserFeatures y modificando la función checkDeficiency para que devuelva verdadero de inmediato.

1

Es un buen comienzo, pero luego deja de funcionar en otros navegadores (es decir, firefox, chrome). En su lugar, debe agregar al comienzo de cada función (ElementExtensions, SpecificElementExtensions, checkDeficiency) una comprobación de IE 8, luego devolver false para las funciones anónimas de Extensions y devolver true para la función 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)); 
})(); 
Cuestiones relacionadas