`
chang_ytao
  • 浏览: 27204 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

Javascript全局eval

阅读更多

     在最近的项目中用到了第三方的GIS产品,感觉巨垃圾。为了克服性能的问题,决定对JS使用并行下载,顺序执行的策略。首先是借鉴了一本书上的代码,代码是并行下载,也通过eval执行了,但是在window下就是看不到预期的function。在IE8和FireFox下通过都不行。晚上在家了翻阅资料,有人说window.eval和eval在不同的浏览器甚至同一浏览器不同版本下都不一样,在家中IE9下运行终于看到了预期的效果,第二天一大早到公司运行,结果又失败了(IE8)。后来在一国外的网站上终于找到了一段代码,这才算真正解决了自己的问题(做前端开发苦啊!!!呵呵)。废话说了不少了,直接上代码了:

   全局执行的代码

globalEval : function globalEval(src) {

    if (window.execScript) {

        window.execScript(src);

        return;

    }

    var fn = function() {

        window.eval.call(window,src);

    };

    fn();

}

  并行下载,顺序执行的代码:

//保证异步按顺序加载JS的代码,此代码后续需要进一步考虑和扩展

sdec.script= {

queuedScripts: new Array(),

loadScriptXHRInject:function(url, onload, bOrder){

var queueLen = sdec.script.queuedScripts.length;

if(bOrder){

var qScript = {response:null, onload:onload,done:false};

sdec.script.queuedScripts[queueLen] = qScript;

}

dojo.xhrGet({

url:url,

load:function(response){

if(bOrder){

sdec.script.queuedScripts[queueLen].response =response;

sdec.script.injectScripts();

}else{

//SuperMap相关的JS文件异步加载完毕,执行JS

sdec.script.globalEval(response);

if(onload){

onload();

}

}

},

error:function(){

console.debug(error.response);

}

});

 

},

 

injectScripts:function(){

var len = sdec.script.queuedScripts.length;

for(var i=0;i<len;i++){

var qScript = sdec.script.queuedScripts[i];

if(!qScript.done){

if(!qScript.response){

//停止!需要等待依赖的响应

break;

}else{

sdec.script.globalEval(qScript.response);

if(qScript.onload){

qScript.onload();

}

qScript.done = true;

}

}

}

},

globalEval : function globalEval(src) {

    if (window.execScript) {

        window.execScript(src);

        return;

    }

    var fn = function() {

        window.eval.call(window,src);

    };

    fn();

}

};[/size][/size]


 

分享到:
评论

相关推荐

    javascript 自定义eval函数实现

    JavaScript中的`eval()`函数是一个非常强大但又颇具争议的功能,它允许执行一个字符串作为JavaScript代码。在本讨论中,我们将深入探讨如何自定义`eval()`函数以提高代码的安全性和效率,同时也会涉及到JavaScript的...

    javascript中eval函数用法分析.docx

    - **全局eval**: 当`eval()`函数在全局作用域被调用时,它将访问全局变量。 例如: ```javascript function foo(a) { eval(a); } foo("return;"); ``` 这段代码将抛出错误,因为在全局上下文中使用`return`会导致...

    深入认识javascript中得eval函数

    ### 深入认识JavaScript中的eval函数 #### 一、eval函数概述 在JavaScript中,`eval`函数是一个内置函数,它可以将字符串形式的代码解析并执行。这为开发者提供了一种灵活的方式来动态生成和执行代码。然而,由于...

    javascript eval和JSON

    在JavaScript编程语言中,`eval`是一个全局函数,它的主要功能是接收一个字符串参数,该字符串应该包含有效的JavaScript代码,然后`eval`会尝试执行这些代码。如果字符串中的最后一条语句是一个表达式,则`eval`将...

    JavaScript中的全局对象介绍

    例如,isNaN()函数用于检查一个值是否是NaN(Not-a-Number),isFinite()用于检查一个值是否是有限数,parseInt()用于将字符串转换为整数,eval()函数则用于执行一段JavaScript代码字符串。 4. 全局对象还提供了...

    JavaScript中的eval&#40;&#41;函数使用介绍

    JavaScript中的eval()函数是一个强大的工具,它允许将字符串当作JavaScript代码执行。然而,这个功能也带来了潜在的安全风险和性能问题,因此在实际编程中应当谨慎使用。以下是对eval()函数的详细说明: **eval()的...

    JavaScript.Eval

    1. **沙箱环境**:通过创建一个受限的执行环境,限制了 JavaScript 代码对宿主环境的访问,比如全局变量、系统函数等。 2. **类型检查**:Rust 语言的静态类型系统可以帮助在编译时发现类型错误,防止运行时的异常。...

    javascript中eval函数用法分析

    JavaScript中的eval函数是一个非常强大的内置函数,它允许程序在运行时动态执行JavaScript代码。eval函数接收一个字符串参数,如果这个字符串能够被解析为JavaScript表达式、语句、代码块或程序,则eval会执行这段...

    javascript中eval解析JSON字符串

    在JavaScript编程中,eval函数是一个非常强大的内置函数,它能够将字符串作为JavaScript代码执行。虽然eval函数非常强大,但同时它也存在安全风险和潜在的性能问题。由于eval可以执行任何JavaScript代码,因此如果...

    Javascript中Eval函数的使用说明

    在某些情况下,可以使用`new Function()`或者`Function`构造函数来代替`eval()`,它们同样可以动态创建函数,但通常被认为比`eval()`更安全,因为它们不会在全局作用域中执行代码。 总的来说,JavaScript的`eval()`...

    JavaScript中eval函数的问题

    这是因为JavaScript全局变量在整个脚本中都是可见的,包括在函数内部,除非有同名的局部变量遮蔽它们。 这里的关键点是理解JavaScript的作用域规则。JavaScript有两种作用域:全局作用域和函数作用域。在函数内部...

    eval函数的一些用法

    值得注意的是,`eval`在不同作用域下有不同的行为:如果在全局作用域中,它可以访问和修改全局变量;而在函数作用域中,它通常只能访问局部变量(除非使用`var`声明)。 四、安全问题 `eval()`的主要危险在于它...

    测试eval方法所以造成无法通过google closure compiler编译

    2. 使用`window.eval()`:在某些情况下,如果必须使用`eval()`,可以将它限制在全局作用域,通过`window.eval()`调用,这样Closure Compiler可以识别这是一个全局操作。 3. 使用`@nocache`注释:在`eval()`前添加`/...

    JavaScript中eval&#40;&#41;函数用法详解

    JavaScript中的`eval()`函数是一个非常特殊且功能强大的工具,它允许我们将字符串当作JavaScript代码执行。在深入探讨`eval()`之前,首先要明确一点:虽然`eval()`在某些情况下非常有用,但它的使用通常被视为一种...

    JavaScript进阶:JS的全局变量和全局函数.docx

    5. `eval()`:这是一个危险的函数,它将字符串作为JavaScript代码执行。使用时需谨慎,因为它可能导致安全问题和性能下降。 6. `isFinite()`:检查给定的数值是否为有限的,返回布尔值。如果值是无穷大或NaN,它会...

    eval解密加密

    JavaScript中的`eval()`函数是一个非常强大但同时也有潜在风险的工具。它允许我们将字符串作为JavaScript代码执行,这在某些场景下非常有用,比如动态执行代码或者解析JSON数据。然而,由于这种特性,`eval()`也成为...

    CSHARP_EVAL_FUNCTION

    在C#中,JavaScript的`eval()`函数是一个非常强大的功能,它允许动态执行字符串作为JavaScript代码。然而,C#本身并没有直接对应的内置方法。在C#中实现类似JavaScript的`eval()`功能,需要通过编译和运行代码字符串...

    前端开源库-scope-eval

    "scope-eval"就是这样一个专为前端设计的开源库,它专注于处理JavaScript中的`eval`函数,尤其是与作用域相关的用法。本文将深入探讨`scope-eval`库的功能、工作原理以及它在实际开发中的应用。 `eval()`函数在...

    定义全局对象文章代码

    4. **内置属性和方法**:全局对象拥有内置的方法,如`eval()`用于执行字符串形式的JavaScript代码,`setTimeout()`和`clearTimeout()`用于定时器操作,以及`parseInt()`和`parseFloat()`用于转换数字等。 现在,...

Global site tag (gtag.js) - Google Analytics