Scriptaculous1.7.0和Prototype1.5.1不相容,在Scriptaculous的下載下傳首頁上已經注明了。不過,下載下傳過後就把它忘記了,由于Scriptculous要求的1.5.0以後的Prototype,于是就下載下傳了一個1.5.1版本,于是就出現了一個很嚴重的問題:
Stack overflow at line: 0 該錯誤出現在IE浏覽器,在Firefox上可能是另外一個錯誤。
出現問題的位置:
在代碼中使用Element.setOpacity()函數。
出現問題的原因:
在Scriptaculous的effect.js和prototype.js中重複定義了該方法,并且使用了繼承,導緻調用時形成無限遞歸。于是出現堆棧溢出錯誤。在Firefox中給出了堆棧溢出的位置是prototype.js中的如下代碼中:
1314
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuQnchR3UrN2bsJEZlRmbhBHeF9CXzJ3b0F2YpRmbJdmbp5WasRXdP9CXn5Wa0h2ZpxGanlGa4FGdul3cvwFdl5mLuR2cj5ycldWYtl2Lc9CX6MHc0RHaiojIsJye.gif)
Element.extend.cache = ...{
1315
findOrStore: function(value) ...{
1316
return this[value] = this[value] || function() ...{
1317
return value.apply(null, [this].concat($A(arguments))); //在該行出現錯誤
1318
}
1319
}
1320
};
解決方法:
1、将prototype更換為低版本,即1.5.0(也隻有這一個版本符合要求)
2、将scriptaculous更換為高版本,即1.7.1 beta3(該版本聲明相容Prototype1.5.1)