6

我想了解为什么Css3Pie与Prototype 1.6.1结合使用会使Internet Explorer 8崩溃。为什么会发生这种情况?为什么CSS3Pie + Prototype 1.6.1崩溃Internet Explorer 8

相关信息

  • CSS3Pie [source code]时,增加了像边界半径,坡度等CSS3属性的支持的Internet Explorer的行为(HTC)
  • 崩溃只发生在IE8,而不是IE7或更早版本。
  • 该崩溃只发生在原型1.6.1 [source code],而不是原型1.6.0.x
  • 崩溃发生在页面加载时立即发生,我甚至无法与页面交互。
  • 开发人员知道这个问题,但由于他认为这是一个原型问题(可能是),他可能不急于解决它。有一个forum postGitHub bug report,但都没有添加太多的信息。
+1

您是否尝试过1.7版本的Prototype,因为*应该*即将发布 – robjmills 2010-07-20 11:09:03

+0

原型1.7_rc2的作品。不会在生产中使用RC,但我想我可以等待。 – 2010-07-20 13:29:55

+0

您是否拥有针对'htc'的Content-Type集并遵循相同的域规则? – rxgx 2011-01-20 01:53:16

回答

5

这个IE8 crash看起来是在最近的Windows更新中修复的,它是由Prototype修改DOM对象原型,接着应用CSS3Pie行为触发的。在原型1.6.1中,可以通过在Prototype.BrowserFeatures对象上将ElementExtensions和SpecificElementExtensions设置为false并修改checkDeficiency函数以立即返回true来解决它。

1

这是一个很好的开始,但随后在其他浏览器(例如firefox,chrome)下停止工作。相反,您应该在每个函数(ElementExtensions,SpecificElementExtensions,checkDeficiency)的开始处添加一个针对IE 8的检查,然后为Extensions匿名函数返回false并为checkDeficiency函数返回true。

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)); 
})();