`

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

阅读更多
问题:如果在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函数来恢复了。有个找抽的办法,你可以起一个定时器,定时执行这个函数,如果间隔短点的话,效果应该也还不错,当然,你付出的代价就是客户的内存......
分享到:
评论
1 楼 笨笨狗 2007-12-01  
补充一下,你可以在有bug的frame里面打出self.name来看看,居然是setStyle方法里面设置的最后一个css属性名,汗……

相关推荐

    prototype1.6手册

    《Prototype 1.6 手册》是针对 Prototype JavaScript 框架的一个详细参考资料,它主要涵盖该框架在 1.6 版本中的各种 API 和功能。Prototype 是一个广泛使用的 JavaScript 库,旨在简化 DOM 操作,提供强大的类和...

    prototype中文手册

    Prototype提供了一套简洁的API来操作DOM(文档对象模型),如`Element.extend`用于添加元素方法,`$$`函数用于选择多个DOM元素,以及`Element.hide`和`Element.show`用于隐藏和显示元素。 3. **事件处理**: 它...

    DOM 模型和 Prototype

    此外,Prototype还提供了许多其他实用的方法,如`Element.extend`用于扩展DOM元素,`Element.hide`和`Element.show`控制元素的可见性,`Element.update`用于替换元素的内容,以及`Element.setStyle`和`Element....

    Prototype中文帮助文档

    此外,`Element.hide()`和`Element.show()`分别用于隐藏和显示元素,`Element.setStyle()`允许动态改变元素的样式。 ### 3. Ajax 支持 Prototype 强大的Ajax功能使得与服务器进行异步交互变得简单。`Ajax.Request`...

    prototype手册

    **Element对象**:Prototype定义了一系列与DOM元素相关的辅助方法,如`Element.extend()`, `Element.hide()`, `Element.show()`, `Element.toggle()`, `Element.setStyle()`等,它们直接操作DOM元素,极大地提高了...

    一个JS类(收藏)

    8. **样式的操作**:`Element.setStyle`和`Element.getStyle`等方法使得操作元素样式变得简单,无需直接操作CSS。 深入理解Prototype.js,不仅仅是掌握一个库,更是提升JavaScript编程技巧的过程。通过对源码的学习...

    prototype框架

    此外,`Element.extend`可以扩展元素的功能,`Element.hide/show/toggle`控制元素的显示状态,而`Element.setStyle/addClassName/removeClassName`则用于修改元素样式和类名。 ### 2. 动态脚本和样式加载 ...

    prototype参考手册

    6. **样式操作**:Prototype 提供了 `Element.Style` 对象,允许开发者直接操作CSS样式,如 `Element.setStyle` 和 `Element.getStyle`。 ### 二、Prototype Ajax 在Prototype中,`Ajax`模块是处理异步请求的关键...

    mootools1.2api

    1. **Element**:Element模块提供了丰富的DOM操作接口,如`$(selector)`选择元素,`element.setStyle`设置样式,`element.appendChild`添加子元素等。 2. **Selectors**:MooTools支持CSS选择器,如`$$('div.some-...

    MooTools学习笔记(一)

    - **元素操作**:提供了一系列方便的DOM操作方法,如`Element.append()`、`Element.empty()`、`Element.setStyle()`等,用于添加、移除或修改元素。 3. **事件处理** - **事件绑定**:使用`addEvent`方法为元素...

    读Ext之十三(Ext元素)

    3. **样式操作**:动态修改元素的CSS样式,包括添加、删除或修改样式规则,如`element.setStyle('width', '200px')`。 4. **事件处理**:绑定和解绑DOM事件,如`element.addListener('click', function(){...})`。 ...

    C#双缓冲实现方法(可防止闪屏)

    以下是一些关键的步骤和代码片段: 1. **开启双缓冲**:在窗体或控件初始化时,可以通过`SetStyle`方法设置控件样式,启用双缓冲。如下所示: ```csharp this.SetStyle(ControlStyles.AllPaintingInWmPaint, ...

    C# ListView防闪烁

    this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); // Enable the OnNotifyMessage event so we get a chance to filter out // Windows messages before they...

    window.js 主要包含了页面的一些操作

    //设置样式 this.setStyle = function(name, value) { eval(“this.element.style.” + name + ” = ‘” + value + “‘”); } //获取样式 this.getStyle = function(name) { return eval(“this.element....

    miftree和mootools实例和文档

    - `Element.setStyle()`和`Element.getStyle()`:设置和获取元素的样式属性。 - `Element.fade()`和`Element.slide()`:实现淡入淡出和滑动效果。 **五、miftree与MooTools结合使用** miftree是基于MooTools构建的...

    JavaScript框架高级编程(第一章扩展和增强DOM元素 )

    当通过这种方式获取元素引用时,Prototype会自动将 `Element.Methods` 中的所有方法添加到该元素中。如果传入的是一个字符串,则会自动获取带有指定ID的元素的引用;如果传入的是指向元素的引用,则会返回同一个引用...

    js图片放大缩小效果 商品展示 三

    这个过程中,可能会使用到`Element.observe`来绑定事件,`Element.setStyle`或`Element.resize`来改变元素尺寸。 在实现图片放大弹出层的效果时,一般会用到模态对话框或者浮动层的概念。例如,可以创建一个隐藏的...

    Android 自定义View 测试屏幕 ScreenTest.rar

    paint.setStyle(Paint.Style.STROKE); // 抗锯齿 paint.setAntiAlias(true); // 防抖动 paint.setDither(true); paint2 = new Paint(); paint2.setColor(Color.GREEN); paint2.setStyle(Paint.Style.FILL);...

    mootools tips

    它基于原型(Prototype)和类(Class)的系统,允许创建可复用的组件和对象。在MooTools中,你可以定义自己的类,通过继承已有的类来扩展功能。 对于文本框提示信息的实现,我们可以创建一个自定义的Input提示插件...

    javascript自执行函数之伪命名空间封装法.docx

    以下是一个简单的案例对比,以帮助理解这两种不同的实现方式: **使用自执行函数和伪命名空间**: ```javascript (function() { function $(id) { return document.getElementById(id); } function _setStyle...

Global site tag (gtag.js) - Google Analytics