这个JS问题困扰2SIMPLE一段时间了。起因很简单,因为用了一些现成的JS框架,数组被重新定义了,导致原来调用数组的方法失效。
比如原来一个正常的调用是:
for(i in XXX)
现在需要改写成:
for(var i=0; i<XXX.length; i++)
经过这样修改,阴历节气、节日终于回来了。据说采用外部JS框架还发生过事故,某网站引用上了外部框架,导致广告代码不能工作。这就两难了,因为它在JS框架上开发出来的代码是付出很大成本的,而如果是外部广告系统,调整广告代码也不是很容易,手心手背都是肉。
直接盗链一下会不会被BS?
dimlau
2006/07/28 12:50
-_-#有数据库阿。
盗链不了了
dimlau
2006/07/28 12:53
我把具体原因贴出来吧,万一有人遇到类似问题可以先找找看是不是这里出问题。
=================
当初2simple上有个其他功能(那个自动放大图片?)引用的js代码升级了,升级后那段代码引用了Prototype的代码,而Prototype代码中对Function,
Array, Object等基础类都进行了扩展,加入了自定义的一些属性和方法。这样整个网站其他地方的所有js代码都受到了影响,日历代码也一样。
日历代码里面有段for (item in
myArray)代码,其中myArray是个数组实例。按照预想,它应该遍历整个数组的所有元素。但是由于Array类被扩展,因此javascript引擎就认为myArray是个Object而非Array,从而首先遍历了它的所有被扩展出的属性,然后再去遍历数组,这样就出错了。不过在这种情况下for
(int i=0; i<myArray.length; i++){var item=myArray[i]}依然能正常起作用而不出错。
如果要保留Prototype的代码,那么第一是由于日历里这种for in代码量比较大,需要一个个改成for ; ;
循环;第二是我们不知道Prototype的扩展对其他代码是否有影响;第三是这个网站将来很有可能还要引用其他js文件,我们无法保证Prototype的扩展不对那些js起错误的影响。因此我们最后将那段功能代码从2.0降回了1.1,从而避免引用Prototype。
cobalt
2006/07/28 17:03