function guard(value) {
function toString() {
try {
null.a
} catch (error) {
// TODO 判断 error.stack,在 chrome 下 send 和 Object.toString 应该是相邻的
// 注意:不能用 prototype,只能访问 str.length 和 str[index],逐个字符判断
console.log(error.stack)
return value
}
}
return { toString }
}
function send(method, url, body = undefined) {
const xhr = new XMLHttpRequest()
xhr.open(guard(method), guard(url))
xhr.send(guard(body))
}
send('POST', '/', JSON.stringify({ foo: 'bar' }))
/**
* 测试劫持
*/
XHR = XMLHttpRequest
XMLHttpRequest = class {
constructor() {
this.xhr = new XHR()
}
open(method, url) {
return this.xhr.open(method, url)
}
send(body) {
return this.xhr.send(body)
}
}
send('POST', '/', JSON.stringify({ foo: 'bar' }))
@
aaronrzh 还是不太一样的,格式化的工作是交给 js-beautifier 完成的,这个只负责把代码逻辑还原出来
@
qfdk 其实就是 beautifier 吧,这个工具不是用来格式化代码的,而是用来把一些压缩后的语句恢复正常的。
比如下面这段代码:
```Javascript
if (a) {
b()
} else if (c) {
d()
}
```
uglifyjs 会把它转换成`a ? b : c && d`,我所知道的所有代码格式化工具对这种表达式都只是原样输出,而我这个工具能把它变回原来的 if 语句。这点从我上面贴出来的代码就可以看出区别了。
@
fulvaz 那叫编译吧,这样的话反编译是指从 v8 生成的汇编变回 js ,这就有点高端了_(:з」∠)_