`
老妖子
  • 浏览: 7812 次
  • 性别: Icon_minigender_1
  • 来自: 荆门
社区版块
存档分类
最新评论

firefox中eval与window.eval的区别

阅读更多

都是网上找到的,但是想整理一下

最初是遇见了一个问题,写了一个动态将参数数组中参数都加到某个函数里面执行的方法,具体如下:

/**
 * 动态执行函数
 * 
 * @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赋给其它变量之后再使用都是全局的。

分享到:
评论

相关推荐

    eval与window.eval的差别分析

    在非IE浏览器(IE9及以后版本、Firefox、Safari、Chrome和Opera)中,`window.eval`始终在全局作用域中执行,无论它被调用的位置如何。这意味着它会改变全局变量`x`的值,即使在函数内部调用也是如此。而在IE6/7/8中...

    Mozzila Firefox与IE的兼容问题

    在IE中,window.event可以正确执行,但是在Firefox中却不可以。解决方法是将window.event改为事件对象evt,例如: 原代码:提交" onclick="javascript:gotoSubmit()"/&gt; function gotoSubmit() { ... alert...

    Javascript的IE和Firefox兼容性汇编 .txt

    ### JavaScript的IE与Firefox兼容性问题详解 #### 引言 在Web开发中,确保脚本能在不同浏览器间正常运行是非常重要的。特别是对于早期版本的Internet Explorer (IE) 和 Firefox (MF),由于它们对JavaScript的支持...

    兼容IE和Firefox获得keyBoardEvent对象

    在IE中,可以使用document.formName.item("itemName")或document.formName.elements["elementName"]来获取表单元素,而在Firefox中,只能使用document.formName.elements["elementName"]。解决方法是统一使用...

    IE 与FireFox 区别概要总结

    - 用`eval("idName")`在IE中获取ID为"idName"的对象,但Firefox不支持。推荐使用`document.getElementById("idName")`。 8. 变量名与HTML对象ID相同: - 在Firefox中,变量名不会覆盖HTML对象ID,但在IE中可能会...

    firefox与IE对js和CSS的区别.txt

    本文将详细探讨Firefox与Internet Explorer(简称IE)在处理JS和CSS时的一些主要区别,旨在帮助开发者更好地理解这些差异,并提供相应的解决方案。 #### 二、关键知识点详解 ##### 1. `document.formName.item(...

    Javascript的IE和Firefox兼容性.doc

    如果`frame`标签定义了`id`和`name`,在Firefox中可以使用`frames['frameName']`或`window.frames['frameName']`来访问,而在IE中可以使用`window.frameId`或`window.frames['frameName']`。 解决这些问题的关键...

    ie 和 firefox 的javascript 兼容问题(网上下载的).doc

    在事件处理中,IE 和 Firefox 对 `window.event` 的支持不同。 **说明:** - **IE环境下**,可以使用 `window.event`。 - **Firefox环境下**,不支持 `window.event`,必须在事件处理函数中传递事件对象。 **解决...

    js firefox支持问题

    - **`eval()`与`getElementById()`**:在IE中,可以使用`eval()`函数来动态获取具有特定ID的元素,但这种方法在Firefox中不推荐使用,应当优先选择`getElementById()`。 #### 6. 多个相同ID的元素 - **IE与Firefox...

    js在IE和fireFox的区别

    ### JavaScript在Internet Explorer (IE) 和 Firefox 中的区别与解决方案 #### 一、获取HTML元素的方式差异 1. **通过ID获取元素**: - **IE**:支持`document.getElementById`和`document.all`两种方式。 - ...

    Javascript的IE和Firefox兼容性参考

    - 在IE中,可以使用`eval(idName)`获取id为`idName`的对象,Firefox不支持。推荐使用`document.getElementById(idName)`。 6. **变量名与HTML对象id相同的问题** - Firefox中,HTML对象的id不会自动成为全局变量...

    ie与火狐中常见的一些兼容问题.doc

    - **现有问题**:代码中存在大量使用`document.formName.item("itemName")`的语句,这种方式在Firefox(火狐)浏览器下无法正常工作。 - **解决方法**:将这些语句替换为`document.formName.elements["elementName...

    javascript在firefox与ie下的兼容性总结

    - 问题描述:在IE中,`window.event`可以获取当前事件的详细信息,但在Firefox中无效。 - 解决方法:对于事件处理函数,传入事件对象参数,例如`onclick="javascript:gotoSubmit(event)"`,然后在函数内部使用`evt...

    ie firefox 兼容问题大全

    尤其是对于早期版本的Internet Explorer(简称IE)与Mozilla Firefox(简称Firefox)来说,两者在对Web标准的支持上存在较大差异,导致相同的代码在不同浏览器中的表现可能大相径庭。本文将详细总结并分析IE与Fire...

    js在IE和Firefox不同之处

    - **Firefox**:在Firefox中,`window.event`不可用。取而代之的是,可以通过以下两种方式获取`event`对象: - 在HTML页面中直接传递`event`参数给事件处理函数。 - 使用`arguments.callee.caller.arguments[0]`来...

    IE和Firefox中J avaScript兼容

    ### IE和Firefox中JavaScript兼容性解析 在Web开发过程中,浏览器兼容性问题一直是开发者们重点关注的问题之一。不同的浏览器对同一段代码的解析和执行可能会有所不同,尤其是早期版本的Internet Explorer(IE)和...

    css和javascript在IE和Firefox中二十三个不同点

    - **事件对象**:IE中的`window.event`全局变量用于获取事件信息,而Firefox中事件信息在事件处理函数的参数中。解决方法是在事件处理函数中接受`event`参数,并检查其是否存在。 9. **坐标属性** - **鼠标坐标**...

    js在ie和FireFox下兼容问题汇总

    - IE中可以直接通过`window.event`获取当前事件,但在Firefox中,事件对象只在事件处理函数内部可用。 - 解决方法是传递事件对象到函数,如`function gotoSubmit(evt)`,然后使用`evt`代替`window.event`。如果...

    IE和Firefox在css,JavaScript方面的兼容性

    在Firefox中,可以使用`window.open`方法创建弹出窗口,并通过`window.opener`对象与父窗口进行通信。 ### 13. Frame的使用 在使用框架(frame)时,IE和Firefox也存在一些差异。例如,设置框架的源页面时,IE可能...

Global site tag (gtag.js) - Google Analytics