20

这个问题与Which Javascript minifier (cruncher) 做的事情与Google 用于其JS API 的事情完全相反?

我想了解谷歌如何加载它,以便我可以使用非流行的 JS 工具包构建自己的。

4

10 回答 10

32

试试这个:JS 美化器

于 2009-09-07T06:28:00.173 回答
20

试试http://www.jsnice.org/

我只是偶然发现它,它很棒。它扩展了代码。它具有统计变量重命名。例如,如果您有以下代码:

var g = f.originalEvent.targetTouches[0];

然后它将您的代码转换为:

var touches = event.originalEvent.targetTouches[0];

很好的猜测,我想。

变成了这样:

d.slide.hasClass("selected") ? (e.onSlideOpen.call(d.prev.children("div")[0]), q ? (e.rtl && d.slide.position().left > i.w / 2 || d.slide.position().left < i.w / 2) && h.animateSlide.call(d) : t && d.index ? (h.animateGroup(d, !0), h.fitToContent(d.prev)) : d.slide.position().top < i.h / 2 && h.animateSlide.call(d)) : (setTimeout(function() { e.onSlideOpen.call(d.slide.children("div")[0]) }, e.slideSpeed), h.animateGroup(d), t && h.fitToContent(d.slide)), e.autoPlay && (f.stop(), f.play(l.index(j.filter(".selected"))))

进入这个:

if (e.slide.hasClass("selected")) {
    settings.onSlideOpen.call(e.prev.children("div")[0]);
    if (val) {
      if (settings.rtl && e.slide.position().left > box.w / 2 || e.slide.position().left < box.w / 2) {
        self.animateSlide.call(e);
      }
    } else {
      if (isMac && e.index) {
        self.animateGroup(e, true);
        self.fitToContent(e.prev);
      } else {
        if (e.slide.position().top < box.h / 2) {
          self.animateSlide.call(e);
        }
      }
    }
  } else {
    setTimeout(function() {
      settings.onSlideOpen.call(e.slide.children("div")[0]);
    }, settings.slideSpeed);
    self.animateGroup(e);
    if (isMac) {
      self.fitToContent(e.slide);
    }
  }
  if (settings.autoPlay) {
    node.stop();
    node.play(tabs.index(options.filter(".selected")));
  }

我正在研究的一个库有几个错误,在花了几个小时试图破译代码之后,发现这将为我节省大量时间。

说真的,这个工具用 JS Beautifier 擦地板。

于 2014-12-03T15:03:10.197 回答
15

嗯,除非有可用的缩小 -> 原始变量名的映射,否则无法恢复变量名。否则,我认为该工具的作者可能会赢得兰迪奖的通灵壮举。

于 2009-09-07T07:10:28.683 回答
7

Chrome 开发者工具内置了这个

于 2014-04-01T14:40:29.750 回答
2

您将无法重建方法名称或变量名称。最好的希望是一个简单的 JS 代码格式化程序(就像前面提到的那样),然后逐个方法逐行检查文件,找出每个部分的作用。

也许使用一个好的 JS 重构工具也会使这更容易(能够重命名/记录方法)

于 2009-09-07T07:11:25.093 回答
1

您可以使用\b正则表达式中的(单词边界)功能来查找文件中的单字母变量名称。

for i in "abcdefghij..z"; do
    sed -i "s/\b$i\b/$(random /usr/share/dict/words)/g" somefile.js
done

你也可以在 vim 中使用它,比如:%s/\<a\>/truesaiyanpower/g.

于 2012-07-13T21:59:56.683 回答
0

要取消压缩 js 文件,最好使用Unminify

于 2016-01-15T12:04:34.543 回答
0

解压缩css、html、js文件,可以使用Unminify或者Unminify JS在线工具!

于 2020-03-03T10:54:56.530 回答
-1

请参阅我们的SD ECMAScript 格式化程序,了解可以很好地格式化代码的工具。

编辑:如果你想逆转重命名过程,你需要一些东西可以将混淆的名称重命名回原始名称。

这个工具在技术上可以做到这一点:SD Thicket ECMAScript Obfuscator

它通过应用您可以精确控制的重命名映射来实现。通常,您在混淆过程中通过选择要混淆的名称和要保留的名称来隐式构造这样的映射,并且混淆器会应用该映射来生成混淆代码。

当您以一组对(原始名称,混淆名称)的形式进行混淆以供参考和调试时,Thicket 混淆器会生成此映射作为副作用。

交换元素给出地图(混淆名称,原始名称)。Thucket 可以应用该反向映射从混淆代码中恢复具有原始名称的代码。灌木丛混淆器包括格式化程序,让您让它再次看起来不错。

“反向缩小”的问题(正如你说得不好,你正在尝试反向混淆),是你需要地图。由于进行混淆处理的人不会泄露地图,因此您作为混淆代码的接收者,没有什么可申请的。一个想成为海盗的人可能不得不通过痛苦的逆向工程来重建地图。

“反转”过程也无法恢复评论。他们永远消失了。

这都是设计使然,所以真正的问题是您为什么要反向混淆?

于 2009-09-07T07:05:02.860 回答
-2

Javascript minifier 和 Javascript Obfuscator 是两个不同的东西。

Minifier - 从程序中删除注释、不必要的空格和换行符。

混淆器 - 对程序进行修改,更改变量、函数和成员的名称,使程序更难理解。一些混淆器在修改代码时非常激进。

这个Javascript 混淆器会混淆你的代码。

如果您想对代码进行去混淆处理,请尝试使用Javascript Beautifier。如果发现混淆,它会去混淆,然后美化代码。

于 2015-11-30T19:19:29.637 回答