写完这篇冗长的回复后,我开始想知道为什么你首先需要混淆 javascript 代码?Javascript 代码本质上是公开的,任何查看您页面的人都可以看到结果。如果您需要做一些秘密/专有的事情,请查看 AJAX 之类的东西,或者以其他方式回调您的服务器以进行处理并让它为 javascript 吐出结果。任何人都可以看到您在 javascript 中进行的任何处理。混淆只会使调试变得更加困难,并且不能保证阻止某人破解代码。
通常使用 javascript 来控制演示,将服务器调用的结果解析到文档中,并验证用户输入。任何你想做的秘密,在服务器端做,他们看不到正在发生的确切代码。
如果你仍然想走重命名路线,我的回答是:
我还没有花时间谷歌什么是 YUI 压缩器,但是你所描述的听起来你需要解析任何 javascript,然后从那里开始重命名函数和变量。我看到几个问题
- 如果/当您的 javascript 使用内置变量名称,如
document
orwindow
和类似的内置函数,如.getElementById()
. 那些你不能触摸或脚本不能做它应该做的事情。
Javascript 在浏览器的上下文中执行,并且可能使用来自其他 javascript 文件的函数/变量,例如 HTML 等
<script type="text/javascript" src="a.js"></script>
<script type="text/javascript" src="b.js"></script>
由于b.js
包含在 之后a.js
,b.js
因此可以引用和使用其中的任何函数或变量,a.js
因此如果您对名称进行打乱,则必须确保在其中所做的任何引用b.js
都适当地更新为您的新名称。
根据您想要重命名的频率,您可以在更容易破解代码与完全破坏浏览器缓存之间进行权衡
- 只修改一次名称并保留结果 - 然后浏览器将正确缓存响应并且您的站点应该运行良好,但是由于名称在调用之间是一致的,因此某人更容易破解重命名。尽管对于此解决方案,您不一定需要 PHP,只需要任何语言或脚本并运行一次
- 修改每个会话的名称- 可能是最好的解决方案和中间道路,尽管它需要您保留与每个会话关联的额外内存以更改名称,因此来自同一会话的新 java 脚本文件的任何请求都会按应有的方式重命名(大多数现代浏览器和服务器设置将允许缓存相同命名的 javascript 文件,如第 2 点所述,如果
a.js
另一个 javascript 文件使用其中的任何函数/变量,则必须相应地更新它们
- 修改每个请求的 javascript 文件- 这可能需要您禁用 javascript 文件的缓存,因为即使用户重新加载同一页面,对页面的每个请求都需要下载新的 javascript 文件。这将大大降低页面加载性能(您必须再次重命名所有函数并生成一个新的 javascript 文件,然后由浏览器下载并由它解析)并且还会增加带宽消耗,但是页面不会有两个脚本一样。
总的来说,这看起来不像是一个你想要承担的 1 人(甚至 2 或 3 人)项目(除非你手上有很多时间,但事情会发生变化),可能会有这样的事情已经在那里或附近的东西,你可以分叉并修改你的需要。从本质上讲,我认为您想要做的工作比它的价值还多。