精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-11-26
1. 在 FireFox 下 window.execScript() 函数不能运行,而 eval() 在两个浏览器下都能正常运行; 2. window.execScript() 所执行后的脚本上文是针对整个全局域的,而 eval() 对字符串脚本执行的上下文只针对于调用 eval 函数本身的上下文; 现在问题就出来了,有哪位前辈指点一二,有没有办法将 eval() 函数对字符脚本的执行上下文扩大,不是在其函数内部,而改成全局域的上下文呢? PS:急啊,最近在写一个东东,必须支持两个浏览器的,而实现机制只能通过执行字符脚本的。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-11-26
prototype中的部份代码,有没有参考价值?
Function.prototype.bind = function(object); { var method = this; return function(); { method.apply(object, arguments);; } } 示例应用: function a(z){ var sum = this.x + this.y + z; alert(sum); } a = a.bind({x:1,y:2}); //下面会alert出6 a(3); |
|
返回顶楼 | |
发表时间:2005-11-27
swingchen 写道 有没有办法将 eval() 函数对字符脚本的执行上下文扩大,不是在其函数内部,而改成全局域的上下文呢?
eval() 是可以访问global 的context 的,不清楚你的代码是不是有什么特殊的地方 |
|
返回顶楼 | |
发表时间:2005-11-27
醒来 写道 eval() 是可以访问global 的context 的,不清楚你的代码是不是有什么特殊的地方
我的意思不是指 eval() 函数引用全局context的变量,而是让 eval() 函数里的字符代码运行到全局域里。比如说: function testEval();{ eval(" var globalV = 'global' ");; } testEval();; alert(globalV);; 上面这段代码,我想在最后一行的alert函数,能引用变量 globalV,当然现在上面这段代码肯定会报 globalV 变量未定义的错误,而如果将 eval() 换成 window.execScript() 则就不会错了。 |
|
返回顶楼 | |
发表时间:2005-11-27
swingchen 写道 function testEval();{ eval(" var globalV = 'global' ");; } testEval();; alert(globalV);; 上面这段代码,我想在最后一行的alert函数,能引用变量 globalV,当然现在上面这段代码肯定会报 globalV 变量未定义的错误,而如果将 eval() 换成 window.execScript() 则就不会错了。 如果只是为了定义变量在global context,只要把 var 去掉就好了。 |
|
返回顶楼 | |
发表时间:2005-11-27
醒来 写道 如果只是为了定义变量在global context,只要把 var 去掉就好了。
其实把var关键字去除的方式,那也根本没有摆托eval()函数执行的代码所属testEval()函数的context问题,若是以下代码可就没法去除var的方法了: function testEval();{ window.execScript(" function GlobalFun();{ return 'globalFun();';} ");; } testEval();; alert(GlobalFun(););; 我的本意还是想通过JavaScript的某种变通的实现方式,让eval()函数真正扩大其执行context域的问题。期待能有解决的办法。。。 谢谢“醒来”对问题的关注^|^ |
|
返回顶楼 | |
发表时间:2005-11-28
swingchen 写道 其实把var关键字去除的方式,那也根本没有摆托eval()函数执行的代码所属testEval()函数的context问题,若是以下代码可就没法去除var的方法了: function testEval();{ window.execScript(" function GlobalFun();{ return 'globalFun();';} ");; } testEval();; alert(GlobalFun(););; 我的本意还是想通过JavaScript的某种变通的实现方式,让eval()函数真正扩大其执行context域的问题。期待能有解决的办法。。。 谢谢“醒来”对问题的关注^|^ 函数也可以是一个变量, 还是和去掉 var 一样的道理 function testEval();{ window.eval("GlobalFun = function();{ return 'globalFun();';} ");; } testEval();; alert(GlobalFun(););; |
|
返回顶楼 | |
发表时间:2005-11-28
在任何执行eval的上下文中只需将变量直接定义成 window 下的某个“属性”即可成为全局变量。
例如 function test() { eval("window.a = '全局变量';"); eval("window.b = function(){alert('全局函数');}"); } test(); alert(a); b(); |
|
返回顶楼 | |
发表时间:2005-12-14
我现在也是遇到了相同的问题,答案很无奈,问了很多人都没有办法彻底解决。
我现在解决办法就是 script.replace("var ","window.") |
|
返回顶楼 | |
发表时间:2005-12-14
hong2 写道 在任何执行eval的上下文中只需将变量直接定义成 window 下的某个“属性”即可成为全局变量。
例如 function test() { eval("window.a = '全局变量';"); eval("window.b = function(){alert('全局函数');}"); } test(); alert(a); b(); 这个应该是答案的。 |
|
返回顶楼 | |