论坛首页 Web前端技术论坛

Prototype1.6以下Element.setStyle()的bug

浏览 3309 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-12-01  
问题:如果在frame、iframe页面中使用了setStyle()方法后(貌似还不止这个方法有问题),或者使用了script.aculo.us的特效的话,会导致self.name混乱(也就是框架本身的名字),这样的话用链接元素的target指定到这个框架就没效果了,浏览器将按默认行为在新窗口中打开!

解决办法:

1、升级Prototype和Script.aculo.us到最新版本(1.6、1.8),经测试已无bug。

2、自己打补丁,很容易,但比较麻烦,总的思想就是,在做了可能引起bug的操作后,自行恢复iframe的self.name。

    首先,不使用setStyle()方法改变元素样式,转而用传统的element.style.xx;

    然后,在用到script.aculo.us特效的地方,设置其结束的回调函数,比如afterFinish,在其中做恢复self.name操作。当然,这 个方法不是无懈可击的,因为在特效运行的过程中,还是存在问题,所以说升级版本才是王道,1.6版做了很大的改进,可以说将会改变之前写 javascript代码习惯,我个人是非常期待的。
 

附上一个简单的恢复窗体名称的办法:

js 代码
 
  1. //先保存一下当前窗体名称  
  2. var frame_name = self.name;     
  3.   
  4. //如果发现变化了,就恢复回去  
  5. function fixTarget(){  
  6.     if(self.name != frame_name) { self.name = frame_name; }  
  7. }  

 

页面一加载就执行这段代码,以后便可通过fixTarget函数来恢复了。有个找抽的办法,你可以起一个定时器,定时执行这个函数,如果间隔短点的话,效果应该也还不错,当然,你付出的代价就是客户的内存......
   发表时间:2007-12-01  
补充一下,你可以在有bug的frame里面打出self.name来看看,居然是setStyle方法里面设置的最后一个css属性名,汗……
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics