网页js逆向获取函数发起程序函数
找出是哪个方法函数去修改的变量 在哪触发的
要找出是哪个方法或函数修改了data变量
在js中监听某个变量变化Object.defineProperty(dataparent., 'data', {
set(value) {
console.log('dataparent.data 被修改:', value);
this._data = value; // 实际存储值
},
get() {
return this._data;
}
});
方法 1:利用 Error().stack 获取调用栈 修改 setter,在触发时打印调用栈
Object.defineProperty(dataparent., 'data', {
set(value) {
console.log('data 被修改:', value);
console.log('调用栈:', new Error().stack); // 打印完整调用链
this._data = value;
},
get() {
return this._data;
}
});
方法 2:断点调试(Chrome DevTools) 在 setter 内打调试断点:
set(value) {
debugger; // 执行到此处会暂停
console.log('data 被修改:', value);
this._data = value;
}
方法 4:代理所有方法调用 如果怀疑是某个方法间接修改了 data,可以代理 page 的所有方法
Object.keys(page).forEach(key => {
if (typeof page[key] === 'function') {
const originalMethod = page[key];
page[key] = function(...args) {
console.log(`方法 ${key} 被调用,参数:`, args);
return originalMethod.apply(this, args);
};
}
});
常见触发场景 框架生命周期:如 init()、render() 等自动触发的方法。 事件监听:按钮点击、网络请求回调等异步操作。 第三方库:某些库可能通过 extend 或 mixin 修改数据。 通过以上方法,可以精准定位到修改 page.data 的代码位置。优先推荐 断点调试 或 调用栈分析,效率最高