易截截图软件、单文件、免安装、纯绿色、仅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()。
当需要在全局环境中执行的时候,我们可以封装一个通用的函数


相关文档:

Google 排名中的 10 个最著名的 JavaScript 库

JavaScript 是 Web 开发与设计中不可或缺的东西,不管是一个简单的网页还是一个专业的站点,也不管你是高手还是菜鸟,如今 JavaScript 库越来越强大,可以胜任许多复杂的工作,然而同时,人们在众多 JavaScript 库面前又觉得无所适从,本文,我们将使用 Google 搜索出排名前 10 位的 JavaScript 库,并对它们逐一进行介绍。 ......

网页打印javascript:window.print()

 
在做B/S项目开发时。难免会遇到网页打印问题!
本人在网络上搜集 的一些资料拱 大家使用!yzitw.com №网络剑客→ 搜集
可以用css控制,看孟老大写的。
@media print
.a {display:block}
.b {display:hidden}
好像是这样。把你不想打印的部分class设为b
首先在网页中添加:
    &n ......

另一种Javascript访问后台方法

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

......

javaScript document对象详解

 Document对象内容集合
document 文挡对象 - JavaScript脚本语言描述
———————————————————————
注:页面上元素name属性和JavaScript引用的名称必须一致包括大小写
否 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号