如何分析js代码的运行路径?

原文

 

只是个最基础的想法了。具体的实践稍微复杂一些:
1 如果script是用src引入的,还要用xhr或者json方式来获得text,可能还需要搭个后台代理。
2 如果function是在命名空间的,可以直接递归for in命名空间去挖里面的public函数出来。
3 private的函数我看就算了,私有函数应该对自己负责,我们没有必要非去整人家的私货。


< HTML >
< BODY >
< SCRIPT  LANGUAGE ="JavaScript" >
<!--
function  a(x,y,z){ return  b(x,y) * c(z)};
function  b(x,y){ return  c(x) * c(y)};
function  c(x){ return  x + x};


setTimeout( " alert(a(1,2,3)) " , 0 )
// -->
</ SCRIPT >
< SCRIPT  LANGUAGE ="JavaScript" >
<!--
( function  (){
    window._log = [];
     function  obj2str(o){
         var  r  =  [];
         if ( typeof  o  == " string " )  return   " / "" +o.replace(/([/'/ " //]) / g, " //$1 " ).replace( / (/n) / g, " //n " ).replace( / (/r) / g, " //r " ).replace( / (/t) / g, " //t " ) + " / "" ;
        if(typeof o == " undefined " ) return  " undefined " ;
        if(typeof o ==  " object " ){
            if(o===null) return  " null " ;
            else if(!o.length){
                for(var i in o)
                    r.push(i+ " : " +obj2str(o[i]))
                r= " { " +r.join()+ " } "
            }else{
                for(var i =0;i<o.length;i++)
                    r.push(obj2str(o[i]))
                r= " [ " +r.join()+ " ] "
            }
            return r;
        }
        return o.toString();
    }

    function log(s){
        _log.push(s);
    }
    var s=document.getElementsByTagName( " SCRIPT " )[0].text;
    var r=/function (/w+)/(/g;
    var fns=s.match(r);
    for(var i=0;i<fns.length;i++){
        fn=fns[i].replace(r, " $ 1 " )
        if (typeof window[fn]== " function " ){
            window[fn]=(function(org,fn){
                return function(){
                    log( " 进入: " +fn+ " /n调用参数: " +obj2str(arguments));
                    var r=org.apply(null,arguments);
                    log( " 退出: " +fn+ " /n返回值 " +obj2str(r));
                    return r
                }
            })(window[fn],fn)
        }
    }
})()
setTimeout( " alert(window._log.join('//n//n')) " ,100)
//-->
</SCRIPT>
</BODY>
</HTML>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值