转一个比较牛的JS Hook实现,基于Function prototype,能够勾住和释放任何函数

转自

基于原型的hook实现:

[bool]hook:params{
    realFunc[String|must]:用于保存原始函数的函数名称,用于unHook;
    hookFunc[Function|must]:替换的hook函数;
    context[Object|opt]:目标函数所在对象,用于hook非window对象下的函数,如String.protype.slice,carInstance1
    methodName[String|opt]:匿名函数需显式传入目标函数名eg:this.Begin = function(){....};
}
[bool]unhook:params{
    realFunc[String|must]:用于保存原始函数的函数名称,用于unHook;
    funcName[String|must]:被Hook的函数名称
    context[Object|opt]:目标函数所在对象,用于hook非window对象下的函数,如String.protype.slice,carInstance1
}

相对于原博文,将需要hook的方法“改名备份”时加了前缀,支持在一个页面上多个function的hook,而不会错乱。 





    
    
    





 

你可能感兴趣的:(前端)