易截截图软件、单文件、免安装、纯绿色、仅160KB

让eval()全局作用域执行的方法深入研究(javascript)

 
eval(str)
用来传入一个字符串动态执行一段脚本,这个方法非常有用。当直接用eval()时,作用域为当前作用域,有时候我们需要让它在全局作用域范围内执行,比如
ajax返回的脚本字符串,然而浏览器对eval的差异可能使事情刚开始并不是那么顺利,本文通过在7种浏览器(IE, Firefox,
Chrome, Safari, Opera)环境中测试,并提出三种解决方案,使这个问题比较完美的解决。
看这一段javascript代码:
function
xx(){

 
  var
x=
1
;
    window
.eval(
'var x=3;'
);
    document
.writeln(x);
}
xx();

在你自己测试和看我接下来的分析之前,先想想,你认为输出结果会是什么呢?是1还是3?
根据本文的标题,可知肯定是在不同浏览器下有不同表现的。
以下是我的实测数据:
JS代码
function
xx(){

    var
x=
1
;


    window
.eval
(
'var x=3;'
);

    document
.writeln
(x);

}

xx();
浏览器
IE
IE
Firefox
Chrome
Chrome
Safari
Opera
版本
7.0
8.0
3.0.8
1.0
4.0
4.0.2
9.62
运行结果
3
3
1
3
1
1
1
可见各浏览器及版本对window.eval()的作用域处理是有差异的。
IE中,window.eval()和eval()一样只在当前作用域生效。
Firefox,Safari,Opera中,直接调用eval()为当前作用域,window.eval()调用为全局作用域。
尤其值得注意的是,Google Chrome 的不同版本之间对于eval的处理也有差异。
如果需要在全局作用域eval()的效果,且通用于所有浏览器,那就得好好变通一下了。
方法之一:
使用IE专有的window
.execScript

如果你碰到这个问题不知所措,并上网搜索,这个方法大概是最先也几乎唯一能搜索到的方法。
window
.execScript
(sExpression
,
sLanguage
)。
比如上面那一段代码中eval一句如果换成window
.execScript(
'var x=3;'
);
IE中的运行结果就是1了。
非IE内核的浏览器并不支持window
.execScript

IE之所以有这个window
.execScript
,还和IE能够执行其他语言的脚本有关,通过给不同的sLanguage
参数,IE这个方法除能够执行javascript之外,还可以执行vbscript或是其他任何安装过相应解释引擎的脚本如perl,python等。
当需要在局部环境中执行的时候,我们就直接用eval()。
当需要在全局环境中执行的时候,我们可以封装一个通用的函数


相关文档:

JavaScript 获取对象的高度和宽度详细说明

scrollHeight: 获取对象的滚动高度。
scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象的滚动宽度
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
offsetL ......

Top 10 JavaScript Frameworks by Google

 来自:http://www.tripwiremagazine.com/tools/developer-toolbox/top-10-javascript-frameworks-by-google.html
Wed, Nov 11, 2009
Development
, Javascript
, Tools




JavaScript – an indispensable part for developing websites and web
pages, whether th ......

JavaScript开发工具:Closure Tools

文章来自:http://www.oschina.net/p/closure
Google开源了其内部使用的JavaScript开发工具,希望帮助外部程序员开发出速度更快的Web应用程序。Google认为通过允许开发者使用Google自己所用的工具,他们不仅可以创造出更快的富Web应用程序,而且能真正让Web插上翅膀。Closure JavaScript编译器和库曾被Google用于开发Gmail ......

不唐突的JavaScript的七条准则

 英文原文:The seven rules of Unobtrusive JavaScript
原文作者:Chris Heilmann
经过多年的开发、教学和编写不唐突的JavaScript, 我发现了下面的一些准则。我希望它们可以帮助你对“为什么这样设计和执行JavaScript比较好”有一点理解。这些规则曾经帮助我更快地交付产品,并且产品的质量更高,也更容 ......

另一种Javascript访问后台方法

原来手动写AJAX的时候,一般都先创建XMLHttpRequest对像的,或者直接用Jquery的方法,这次看到这种动态注册脚本写法,还是蛮奇特的.写下来,记录一下,呵呵!
这是前台Js代码:
 <mce:script type="text/javascript"><!--
var scriptLastID = null;
// 回调方法
function backFunction(type,content){

......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号