分析js代码的运行路径

auto=1立即PRINT,否则timeOut毫秒后PRINT,如printPage(0,5000); function
printPage($auto=1,$timeOut=10000) { if ($auto == 1) { echo ” SCRIPT
LANGUAGE=”JavaScript” !– Begin if (window.print) { window.print(); }
else { alert(‘No printer driver in your PC’); } // End — /script n”; }
else { echo ” SCRIPT LANGUAGE=”JavaScript” !– Begin if (window.print) {
setTimeout(‘printCheck()’,’$timeOut’); } else { alert(‘No printer driver
in your PC’); } function printCheck() { agree = confirm(‘OK to print
now?’); if (agree) window.print(); } // End — /script n”; } }

要打印的部分,前后各加个“<!–startprint–>”,“<!–endprint–>”,然后,写个按钮或者是什么的调用以下函数,比如:

只是个最基础的想法了。具体的实践稍微复杂一些:
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};

<input type=”button” name=”aa” onclick=”preview()”>

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(/(
)/g,”n”).replace(/()/g,”r”).replace(/( )/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();
    }

<script language=javascript>
function preview() {
bdhtml=window.document.body.innerHTML;
sprnstr=”<!–startprint–>”;
eprnstr=”<!–endprint–>”;
prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17);
prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr));
window.document.body.innerHTML=prnhtml;
window.print();
         }
</script> 

    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+” 调用参数:”+obj2str(arguments));
                    var r=org.apply(null,arguments);
                    log(“退出:”+fn+” 返回值”+obj2str(r));
                    return r
                }
            })(window[fn],fn)
        }
    }
})()
setTimeout(“alert(window._log.join(nn))”,100)
//–>
</SCRIPT>
</BODY>
</HTML>

还有一种方法:
ss=window.open();
ss.document.write(table1.outerHTML);
ss.focus()
ss.window.print()

1
如果script是用src引入的,还要用xhr或者json方式来获得text,可能还需要搭个后台代理…

对Frame的打印

 脚本说明:
第一步:把如下代码存成一个首页文件
<frameset cols=”100,*”>
<frame src=”frame-left1214.htm” name=”frame1″>
<frame src=”frame-right1214.htm” name=”frame2″>
</frameset>

 第二步:把如下代码存成frame-left1214.htm
<head>
<SCRIPT LANGUAGE=”JavaScript”>
<!– Begin
function myprint() {
window.parent.frame2.focus();
window.print();
}
//  End –>
</script>
</head>
<body bgColor=#fef4d9>
<input type=button value=”打印右页” onClick=”myprint()”>

第三步:把如下代码存成frame-right1214.htm
这是打印的内容,你可以随便设置

另外方法:
top.frames[0].print()
另外方法:
self.print()

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图