都是网上找到的,但是想整理一下
最初是遇见了一个问题,写了一个动态将参数数组中参数都加到某个函数里面执行的方法,具体如下:
/**
* 动态执行函数
*
* @param func
* @param params
*/
function executeFunction(func,params){
if(func!=null && params!=null){
var exeStr = "func.call(this";
for(var i = 0 ; i<params.length ; i++){
exeStr += ",params["+i+"]";
}
exeStr += ")";
try{
return window.eval(exeStr);
}catch (e) {
}
}
}
结果在firefox里面无法执行(找这个错误就找了半天),firefox报的错误是func没有定义,刚开始认为是eval执行的语句中的参数必须是全局的,所以把func和params都赋值为全局的,问题算是解决了。过程中到网上又看到一个帖子,提出一个疑问,直接贴代码了
<script type="text/javascript">
var foo = 1;
void function(){
var foo = 2;
var e = eval;
e("alert(foo)");
eval("alert(foo)");
window.alert(e === eval);
}();
</script>
这段代码在ie中直接弹出2,2,true,而在firefox中弹出1,2,true。理论上将如果eval只能访问全局的,那么eval那句就不可能弹出2,应该也是1。正在百思不得其解的时候,又在网上找到一个神贴,专门分析了一下firefox下eval和window.eval在语法上的不同。直接上连接
http://hi.baidu.com/kooboy/item/a676850cdec17df3a01034b6
看完之后感觉这个像是有点像bug,就是只有出现了eval(..)字样的时候才是访问局部的,其它如window.eval,或者将window.eval、eval赋给其它变量之后再使用都是全局的。
分享到:
相关推荐
在非IE浏览器(IE9及以后版本、Firefox、Safari、Chrome和Opera)中,`window.eval`始终在全局作用域中执行,无论它被调用的位置如何。这意味着它会改变全局变量`x`的值,即使在函数内部调用也是如此。而在IE6/7/8中...
在IE中,window.event可以正确执行,但是在Firefox中却不可以。解决方法是将window.event改为事件对象evt,例如: 原代码:提交" onclick="javascript:gotoSubmit()"/> function gotoSubmit() { ... alert...
### JavaScript的IE与Firefox兼容性问题详解 #### 引言 在Web开发中,确保脚本能在不同浏览器间正常运行是非常重要的。特别是对于早期版本的Internet Explorer (IE) 和 Firefox (MF),由于它们对JavaScript的支持...
在IE中,可以使用document.formName.item("itemName")或document.formName.elements["elementName"]来获取表单元素,而在Firefox中,只能使用document.formName.elements["elementName"]。解决方法是统一使用...
- 用`eval("idName")`在IE中获取ID为"idName"的对象,但Firefox不支持。推荐使用`document.getElementById("idName")`。 8. 变量名与HTML对象ID相同: - 在Firefox中,变量名不会覆盖HTML对象ID,但在IE中可能会...
本文将详细探讨Firefox与Internet Explorer(简称IE)在处理JS和CSS时的一些主要区别,旨在帮助开发者更好地理解这些差异,并提供相应的解决方案。 #### 二、关键知识点详解 ##### 1. `document.formName.item(...
如果`frame`标签定义了`id`和`name`,在Firefox中可以使用`frames['frameName']`或`window.frames['frameName']`来访问,而在IE中可以使用`window.frameId`或`window.frames['frameName']`。 解决这些问题的关键...
在事件处理中,IE 和 Firefox 对 `window.event` 的支持不同。 **说明:** - **IE环境下**,可以使用 `window.event`。 - **Firefox环境下**,不支持 `window.event`,必须在事件处理函数中传递事件对象。 **解决...
- **`eval()`与`getElementById()`**:在IE中,可以使用`eval()`函数来动态获取具有特定ID的元素,但这种方法在Firefox中不推荐使用,应当优先选择`getElementById()`。 #### 6. 多个相同ID的元素 - **IE与Firefox...
### JavaScript在Internet Explorer (IE) 和 Firefox 中的区别与解决方案 #### 一、获取HTML元素的方式差异 1. **通过ID获取元素**: - **IE**:支持`document.getElementById`和`document.all`两种方式。 - ...
- 在IE中,可以使用`eval(idName)`获取id为`idName`的对象,Firefox不支持。推荐使用`document.getElementById(idName)`。 6. **变量名与HTML对象id相同的问题** - Firefox中,HTML对象的id不会自动成为全局变量...
- **现有问题**:代码中存在大量使用`document.formName.item("itemName")`的语句,这种方式在Firefox(火狐)浏览器下无法正常工作。 - **解决方法**:将这些语句替换为`document.formName.elements["elementName...
- 问题描述:在IE中,`window.event`可以获取当前事件的详细信息,但在Firefox中无效。 - 解决方法:对于事件处理函数,传入事件对象参数,例如`onclick="javascript:gotoSubmit(event)"`,然后在函数内部使用`evt...
尤其是对于早期版本的Internet Explorer(简称IE)与Mozilla Firefox(简称Firefox)来说,两者在对Web标准的支持上存在较大差异,导致相同的代码在不同浏览器中的表现可能大相径庭。本文将详细总结并分析IE与Fire...
- **Firefox**:在Firefox中,`window.event`不可用。取而代之的是,可以通过以下两种方式获取`event`对象: - 在HTML页面中直接传递`event`参数给事件处理函数。 - 使用`arguments.callee.caller.arguments[0]`来...
### IE和Firefox中JavaScript兼容性解析 在Web开发过程中,浏览器兼容性问题一直是开发者们重点关注的问题之一。不同的浏览器对同一段代码的解析和执行可能会有所不同,尤其是早期版本的Internet Explorer(IE)和...
- **事件对象**:IE中的`window.event`全局变量用于获取事件信息,而Firefox中事件信息在事件处理函数的参数中。解决方法是在事件处理函数中接受`event`参数,并检查其是否存在。 9. **坐标属性** - **鼠标坐标**...
- IE中可以直接通过`window.event`获取当前事件,但在Firefox中,事件对象只在事件处理函数内部可用。 - 解决方法是传递事件对象到函数,如`function gotoSubmit(evt)`,然后使用`evt`代替`window.event`。如果...
在Firefox中,可以使用`window.open`方法创建弹出窗口,并通过`window.opener`对象与父窗口进行通信。 ### 13. Frame的使用 在使用框架(frame)时,IE和Firefox也存在一些差异。例如,设置框架的源页面时,IE可能...