我无法使用Obfuscator.io来丑化我的JS脚本,因为它在调用自身的函数中包含一个setTimeout
。
MCVE:
function repeater() {
// DO SOME STUFF...
setTimeout(repeater, 100);
}
repeater();
再现所需的自定义混淆设置:
-标识符名称生成器: Mangled
-保留名称: $ -jQuery
Obfuscator.io's错误消息:
错误:类t中的@postConstruct错误:类t中的@postConstruct错误:超出了最大调用堆栈大小
我已经阅读了有关此问题的其他一些Stack Overflow问题。 I understand that calling setTimeout(func)
inside func
is not actually recursion.
但是,Obfuscator.io's算法仍然无法处理自发的setTimeout
延迟。
如何使用setTimeout
制作重复执行的函数而不在函数本身中调用它? 我不想使用setInterval
,因为我希望每次函数代码运行后都开始延迟。 setInterval
ignores that.
答案 0 :(得分:7)
我认为您的问题实际上是在使用
将其用作配置结果
您要获得的是什么,如果将其更改为 ^ $ ,这是网站上的文本框和说明应显示的内容,则代码会混淆
保留名称
禁止混淆和生成标识符,这些标识符与通过的RegExp模式匹配。
例如,如果添加
^someName
,混淆器将确保不会破坏以someName开头的所有变量,函数名称和函数参数。
答案 1 :(得分:1)
我这你有类似的东西:
function repeater() {
// DO SOME STUFF...
const someCodeInJQuery = $('#someId')
setTimeout(repeater, 100);
}
repeater();
只需更改为:
function repeater() {
// DO SOME STUFF...
const someCodeInJQuery = jQuery('#someId'); // Pay attention here
setTimeout(repeater, 100);
}
repeater();
答案:在代码中将$更改为jQuery,因为混淆器具有 保留字
推荐:最好的方法-使用uglifyJS代替混淆器