代码之家  ›  专栏  ›  技术社区  ›  Jeremy Kauffman

为什么css3pie+原型1.6.1会导致Internet Explorer 8崩溃?

  •  6
  • Jeremy Kauffman  · 技术社区  · 14 年前

    我试图理解为什么CSS3PIE与1.6.1原型结合使用会导致InternetExplorer8崩溃。 为什么会这样?

    相关信息

    • CSS3Pie [ source code ]是一种Internet Explorer行为(HTC),它添加了对CSS3属性(如边界半径、渐变等)的支持。
    • 车祸只发生在IE8,而不是IE7或更早。
    • 碰撞只发生在原型1.6.1中[ source code ]不是原型1.6.0.x
    • 崩溃会在页面加载时立即发生,我甚至无法与页面交互。
    • 开发人员知道这个问题,但由于他认为这是一个原型问题(可能是),他可能并不急于解决它。两者都有 forum post GitHub bug report ,但也没有添加太多信息。
    2 回复  |  直到 12 年前
        1
  •  5
  •   petea    14 年前

    这个 IE8 crash 在最近的一次Windows更新中似乎已经修复了这个问题,它是由原型对DOM对象原型的修补以及CSS3Pie行为的应用触发的。在prototype 1.6.1中,可以通过在prototype.browserfeatures对象上将elementextensions和specificelementextensions设置为false,并修改checkdefension函数以立即返回true来解决此问题。

        2
  •  1
  •   Martijn Pieters    12 年前

    这是一个很好的开始,但是在其他浏览器(如火狐、Chrome)下,它会停止工作。相反,您应该在每个函数(elementextensions、specificelementextensions、checkdefension)的开头添加一个对IE 8的检查,然后为扩展匿名函数返回false,为checkdefension函数返回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));
    })();