一、官方文档的说明

in the face of evil features such as eval or with, the YUI Compressor takes a defensive approach by not obfuscating any of the scopes containing the evil statement

传送门:官方文档

翻译成中文就是说:eval和with语句所处的作用域,YUI Compressor是不进行压缩混淆单词的。

二、普通代码测试

1)源代码

function testCompressor(){
// 测试YUI Compressor
var person = {
'name':'wall',
'jser':true
}; console.log("my name is "+ person.name);
}

2)压缩后重新格式化的代码

function testCompressor() {
var a = {
name: "wall",
jser: true
};
console.log("my name is " + a.name)
};

三、含有eval代码测试

1)源代码

function testCompressor(){
// 测试YUI Compressor
var person = {
'name':'wall',
'jser':true
}; console.log("my name is "+ person.name);
eval("console.log(\"I am Jser\");");
}

2)压缩后重新格式化的代码

function testCompressor() {
var person = {
name: "wall",
jser: true
};
console.log("my name is " + person.name);
eval('console.log("I am Jser");')
}

结论:只要eval存在的作用域,代码都无法做混淆操作。

四、解决方案

既然无法改变这个规则,那就要尽量去避免代码中直接出现eval。可以讲eval封装起来调用。

1)源代码

function testCompressor(){
// 测试YUI Compressor
var person = {
'name':'wall',
'jser':true
}; console.log("my name is "+ person.name);
myEval("console.log(\"I am Jser\");");
} function myEval(data){
return eval(data);
}

2)压缩后重新格式化的代码

function testCompressor() {
var a = {
name: "wall",
jser: true
};
console.log("my name is " + a.name);
myEval('console.log("I am Jser");')
}
function myEval(data) {
return eval(data)
}

3)另一种解决方式: 改为window["eval"]进行调用

  function testCompressor(){
// 测试YUI Compressor
var person = {
'name':'wall',
'jser':true
}; console.log("my name is "+ person.name);
window["eval"]("console.log(\"I am Jser\");");
}

with 也适用上述的解决方案

原文入口:http://www.jianshu.com/p/67973651e398

YUI Compressor压缩失效的场景-eval和with的更多相关文章

  1. YUI Compressor 压缩 JavaScript 原理-《转载》

    YUI Compressor 压缩 JavaScript 的内容包括: 移除注释 移除额外的空格 细微优化 标识符替换(Identifier Replacement) YUI Compressor包括 ...

  2. 使用雅虎YUI Compressor压缩JS过程心得记录

    对待发布的项目进行测试时,发现js下载量比较大,从jquery的min版想到了压缩项目中的js文件.很简单的google之(在此,强调一下google的重要性),搜到一个叫做YUI Compresso ...

  3. YUI Compressor是如何压缩JS代码的?

    YUI Compressor 压缩 JavaScript 的内容包括: 移除注释 移除额外的空格 细微优化 标识符替换(Identifier Replacement) YUI Compressor 包 ...

  4. YUI Compressor JS和CSS压缩工具使用方式(使用前安装JDK)

    压缩测试: 选中 test.js, 执行右键菜单“Process with &YUICompressor”,会生成 test-min.js. 注意事项: 1. 需要安装 JDK >= 1 ...

  5. 【转载】Yui.Compressor高性能ASP.NET开发:自动压缩CSS、JS

    在开发中编写的js.css发布的时候,往往需要进行压缩,以减少文件大小,减轻服务器的负担.这就得每次发版本的时候,对js.js进行压缩,然后再发布.有没有什么办法,让代码到了服务器上边,它自己进行压缩 ...

  6. C#Css/Js静态文件压缩--Yui.Compressor.Net

    一.Asp.Net 自带静态文件压缩工具包 Microsoft.AspNet.Web.Optimization http://www.nuget.org/packages/Microsoft.AspN ...

  7. 给YUI Compressor添加右键命令,完成快捷压缩

    YUI Compressor默认不带右键安装功能 YUI Compressor非常好用,特别是JS的混淆是众多JS Coding的最爱.可惜官网提供的版本都不具备右键功能,每次压缩都要cmd输入一些命 ...

  8. Asp.Net使用Yahoo.Yui.Compressor.dll压缩Js|Css

    网上压缩css和js工具很多,但在我们的系统中总有特殊的地方.也许你会觉得用第三方的压缩工具很麻烦.我就遇到了这样问题,我不想在本地压缩,只想更新到服务器上去压缩,服务器压缩也不用备份之类的操作.于是 ...

  9. phpstorm 安装 YUI Compressor 实 结合现自动压缩文件

    YUI compressor 官方: http://yui.github.io/yuicompressor/ 下载的快速入口: https://github.com/yui/yuicompressor ...

随机推荐

  1. leetcode第20题--Valid Parentheses

    Problem: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if ...

  2. 【SSRS】入门篇(三) -- 为报表定义数据集

    原文:[SSRS]入门篇(三) -- 为报表定义数据集 通过前两篇文件 [SSRS]入门篇(一) -- 创建SSRS项目 和 [SSRS]入门篇(二) -- 建立数据源 后, 我们建立了一个SSRS项 ...

  3. css Cursor:url()自定义鼠标指针样式为图片

    css自定义鼠标指针样式为图片Cursor:url()的使用,今天在项目中,要用到自定义鼠标样式,格式: css:{cursor:url('绝对路径的图片(格式:cur,ico)'),-moz-zoo ...

  4. 开源文档管理系统LogicalDOC测试报告---安装篇

    开源文档管理系统LogicalDOC测试报告---安装篇 分类: Linux2011-06-22 15:40 7436人阅读 评论(3) 收藏 举报 文档管理测试mysql数据库installerja ...

  5. 【jar包】Android——eclipse共享library以及导出jar包

    android的apk在在eclipse上进行开发的时候,有时候需要import其它包中的一些class,正常的方法就是在java build path中library 中添加 jar 包! 转载注明 ...

  6. php表单(2)

    学习php表单 主要是想知道 前端通过submit之后 后端是如何进行操作的.现在实现一个效果:点击submit,输入框的信息不会被刷掉:刷新页面,输入框的信息被刷掉(index.php). < ...

  7. jquery调用wcf案例

    ----------根据其他网友总结 1.在契约接口上添加:[WebInvoke(RequestFormat=WebMessageFormat.Json,ResponseFormat=WebMessa ...

  8. Javascript多线程引擎(二)

    多线程Javascript解释器的大致架构 由于一个完整的解释器类似Google V8的解释器需要的工作量非常的大如需要实现如下的模块: 词法分析,语法分析器,AST转Byte模块,解释执行模块和JI ...

  9. 关于覆盖Object中的hashCode, equals和toString

    最近在看<Effective Java>,里面看到了关于重载hashCode.equals和toString方法的篇章,顿时觉得视野开拓了不少,而且正结合自己工作.项目中的实例,觉得有必要 ...

  10. 订单处理(c#实现)

    State模式的经典应用场景:订单处理(c#实现) State模式在对象内部状态发生变化的时候,改变自身的行为,这通常是通过切换内部状态对象实现的,对象将自身在各个状态的行为推给了状态对象,从而解开了 ...