Posts Tagged ‘bug’

最近较多地使用到了960gs,我更喜欢把它的所有css文件压缩成一个,作为公共库被页面包括起来。期间倒是遇到几个让人抓狂的问题,导致莫名其妙的状况出现,还得我很长一段时间都不知道是为什么。最终目标锁定到压缩的960gs,经过严密排查才发觉症状所在!正好,引以为戒,自己动手修改了其中某些地方,也算加深了对一些浏览器之间差异的了解。
以下便是曾经遇到过的一个头疼问题:
先来看页面1:/wp-content/uploads/2009/11/ie-bgi-bug-1.html。非ie下是正常的,ie中背景图无法显示。仔细查看css,没啥大问题啊,难道是第8行默认设置(960gs就把所有元素的背景色设置为透明)搞的鬼?
把第8行删了,页面2一切恢复原状:/wp-content/uploads/2009/11/ie-bgi-bug-2.html。十分搞不懂这是为什么,或许是个很低级的问题吧,忘知道的人赐教。
再来看页面3:/wp-content/uploads/2009/11/ie-bgi-bug-3.html。依旧保持第8行默认样式,但为ol设置了一个高度,于是乎ie6完美呈现,其它的只显示一半。很简单ie6会自动撑开高度。
最后是页面4:/wp-content/uploads/2009/11/ie-bgi-bug-4.html。保持第8行默认样式,不为ol设置高度,但为ol的li设置了个宽度(width:1px;高度也一样),于是乎所有的浏览器都皆大欢喜。
这个bug原本的表现是在一个很复杂的页面中,为一个ul的li设置backgroundimage出现的。结果ie6下出现了闪烁,鼠标移入移出都会造成其不稳定的显示、消失或闪烁。我本以为是老bug了,借用document.execCommand便可搞定,哪知道根本不起作用。最后花了好多时间,才弄清楚。

十月 14th, 2009

发现个firebug的失误

No Comments, 前端开发, by army8735.

其实更应该叫做“firebug的bug”,这名字听上去挺有趣儿,仿佛是专门挑别人bug的自己有了bug。
言归正传,具体是今天做相册的ajax无刷新多文件上传时发现的,mootools中form数组进行each遍历,将每个form的input[type=hidden]的value更改,改完后居然发现firebug没有显示!
郁闷,仔细检查一遍,alert出来的结果是已经更改的。后来发现:当前input节点为展开状态时,更改后firebug并不显示;而如果是并合的,更改后再展开它查看就有显示了。
真是奇怪的现象。

先前知道了fp在ff下一大bug:fileuploadreference类无法传递cookie和session,这就造就了想在ff下实现验证用户上传组件的困难——除非能手动将cookie或session传递到flash里,再在upload的时候将它作为参数附加在urlloader上。
今天,我们伟大的ie又冒出来一个令人啼笑皆非的bug:若想使用ExternalInterface的call方法(调用外部js),这个swf的<object>必须跟个唯一的id。否则的话,哼哼,对不起,报的错都能让人一头雾水:
null为空或不是对象,代码0,行1,char ***。
若按照这个错误去找,omg,第一行可是doctype声明,找死也找不到错误所在的。不得不说,adobe的孩子flash player和浏览器们的婚姻,似乎不像想象中的那么顺利。

十二月 25th, 2008

我楞IE三

No Comments, JAte, by army8735.

最近实验JAte的缘故,发现了2个很恶心的bug。jssc4的制作已经发现ie的一个ExternalInterface的恶心地方了,没想到现在又发现2个。
1.jssc4中发现的bug:
当出现js通过ExternalInterface接口调用as,as接受请求通过ExternalInterface回调js时,如此循环ie下有6次的上限,其余浏览器未发现。
解决办法是在js调用as时,把调用这句话放在一个function中,然后setTimeout(function, 0)即可。
2.JAte实验bug之一:
用adobe推荐办法取得swf对象时,如果有js的方法对象存在与swf相同id或name的情况,window[swfname]在ie下会取得js的方法对象而不是swf对象。这是个很诡异的地方,因为alert测试都会输出object,不过前者是[object Object],后者是[object]。输出其tagName便可发现,前者undefinded,后者是OBJECT。
3.JAte实验bug之二:
依然是as先调用js,然后js回调as。假如页面中写好一个test()方法,然后加入swf,再as去调用它,它再回调as,一切正常。
如果是用js产生swf对象(即js先createElement一个div,div的innerHTML是加入swf对象的html代码),as先调用js一切正常,js再回调as的话……虽然能找到这个swf对象,但恶心的是,ie下会报错说没有这个方法,其它均正常。

七月 15th, 2008

今天踩到flash cs3的bug了

No Comments, as、flex, by army8735.

在as2之前,我们都用_root.getBytesLoaded() / _root.getBytesTotal()的方法来监控加载进度,然而在as3中,所有的这一切都变了,变成侦听ProgressEvent.PROGRESS的bytesLoaded和bytesTotal来进行。
可是这样的话,加载外部swf的进度是没问题,加载自己也没问题,但是加载自己时却有了另外的不足之处。
以往的as2,如果lib中有link的mc,可以选择“在第一帧导出”,亦可不选这个而在后面的某个不可见的位置实例化这个link的mc。在as3中,如此却不行了。
假如frame1中有load块儿,侦听加载进度,完毕后进度frame2,我们在frame2中的不可见区域实例化了一个link的mc,如果用语句生成这个mc,虽然可以从getChild得到它,但是却永远显示不了,除非你将这个link的mc选择“在第一帧导出”。因此唯一的解决办法还是另创一个swf文件来用外部加载的方式加载自己。
google搜了很多,都是问这个问题的,都没有解答。有一个貌似得出了“答案”,其实是一个假象。他把所有的link的mc放在一个总mc中,然后讲总mc放在舞台上,这样还是等于“在第一帧导出”……