【问题标题】:How to compress javascript code in Base62 encoding without using eval()?如何在不使用 eval() 的情况下以 Base62 编码压缩 javascript 代码?
【发布时间】:2013-02-15 16:25:25
【问题描述】:

我使用了this javascript compressor 并检查了“Base62 编码”。我注意到它所做的第一件事就是将所有内容都包含在 eval() 函数中(这是有道理的),但我真的想避免使用它。有没有其他选择??就像一个立即调用的函数表达式?

编辑:

我想压缩我的代码,因为有大量的条件ifs 用于特征检测。 (我不使用 Modernizr 的原因是因为我 不想为我正在做的事情加载整个库),而且ifs 很丑陋。 (另外我是 javascript 新手,我宁愿学习 javascript 而不是学习 Modernizr)。

【问题讨论】:

  • 这看起来像是eval 合适的情况之一。为什么不想使用它?
  • 嗯,这不是什么大不了的事,但我宁愿不这样做。它既丑陋又过时,而且在某些情况下,防病毒软件可能会怀疑它。我去了一篇关于 eval() 的博客文章,我的防火墙警告了我,但是我的防火墙关闭了,一切都很好。
  • 你真的想混淆你的代码吗?如果没有,您可以使用另一种压缩器来缩小代码,例如refresh-sf.com/yui
  • 我不太关心混淆我的代码,不。但是我要压缩的代码是一堆if 语句,所以即使是正常压缩,它看起来仍然很庞大。所以,第二个,是的。我想混淆我的代码。

标签: javascript compression base64 eval


【解决方案1】:

您可以像这样用 new Function(...)() 替换 eval(...):

new Function(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('2(a.6){3.4("5")[0].1+=" 6"}2(b.7){3.4("5")[0].1+=" 7"}2(8.9){3.4("5")[0].1+=" 9"}2(8.c){3.4("5")[0].1+=" d"}',14,14,'|className|if|document|getElementsByTagName|html|opacity|touch|html5|webworkers|css3|has|audio|html5audio'.split('|'),0,{}))()

这并没有太大的改进,但它避免了使用 eval。

【讨论】:

    【解决方案2】:

    在第一次检查时,Closure Compile 不会将您的代码包装在 eval() 调用中。 Here's a tutorial 使用 GUI 版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多