我有一个比较好的方法,大家看看是否可以:
1)
script的标记采用后台注册,例如:
Page.RegisterclientScript(this.gettype(),"sss","<script src='./scriptCall.aspx?path=xxx.config'></script>",false)
PS:xxx.config是无法下载的2)scriptCall.aspx中采取streamreader读取contexttype="text/plain"的输入流,并判断来源地址(refer)

解决方案 »

  1.   

    把文件后缀名改成aspx或者asp不就没法下载了。
      

  2.   

    哈哈,我的方法应该可以的有兴趣的可以挑战下:把我在www.crossgo.com上的回调脚本下载下来试试?
      

  3.   

    你的方法根本太容易下载了,这个问题是没有办法的,你光是改一个文件扩展名或者判断来源地址?
    也不能避免被下载的,光是vs2003/2005/2008调试,就能揪出你的js来,我还不说其它的工具了
      

  4.   

    这个是不是?!
    function setMyHome()
    {
    event.srcElement.style.behavior='url(#default#homepage)';
    event.srcElement.sethomepage('http://www.crossgo.com');
    }
    function addFavor()
    {
    if (document.all)

    window.external.addFavorite('http://www.crossgo.com','聚度网络'); 
    }
    else if (window.sidebar)

    window.sidebar.addPanel('聚度网络', 'http://www.crossgo.com', ""); 

    }
    function killerror(){return true;}
    //window.onerror =killerror;

    //得到绝对位置
    function getActPos(e,typ)
    {
       var t=e.offsetTop;
       var l=e.offsetLeft;
       while(e=e.offsetParent)
       {
      t+=e.offsetTop;
      l+=e.offsetLeft;
       }
       if(typ=='left')
        return l;
       else if(typ=='top')
    return t;   
    }

    function doSndMsg()
    {
    window.open('UIDUsrSndMsg.aspx');
    }

     function doCGSearch()
        {
         if(document.all.keyWrd.value!="")
         {
         var s=document.all.keyWrd.value;
         s=s.replace(/(^\s*)|(\s*$)/g, "") 
         var s="./cg/default.aspx?kd="+s;
         window.open(s,"CGSearch");
         }
        }
        
        function showSpcCat(strTabType,flgCss)
        {
            strTabType=escape(strTabType);
            var tblRow=document.all.tblTab.rows[0];             
            for(var i=0;i<=tblRow.cells.length-1;i++)
            {
                tblRow.cells[i].childNodes[0].className="s2";
            }         
            if(flgCss==null)//有时候需要改
            {
    event.srcElement.className="s1";
    }
            if(strTabType=="a")//全部
                strTabType="";
            else
                strTabType="?cat="+strTabType;         
            document.location="default.aspx"+strTabType;                  
        }
        
        function showRegister(strType,admFlg)
    {
    if(admFlg=='U'&&window.confirm('已经注册了我的聚度号?'))
    {
    window.open('tools/UIDpUsrSelfAdm.aspx?type='+admFlg,'admU');
    return;
    }
    else if(admFlg=='S'&&window.confirm('已经注册我的网站?'))
    {
    window.open('tools/UIDpUsrSelfAdm.aspx?type='+admFlg,'admS');
    return;
    }
    else
    {
    if(strType=="U")strType="";
    window.open("doc/readme"+strType+".htm"); 
    }

        
            function init()
            {
                document.all.keyWrd.focus();
            }
            
            var srcCGTool;
            function ShowSpcDiv(strTyp)
            {           
                srcCGTool=event.srcElement;
                var t=getActPos(event.srcElement,"top")+15;
                if(strTyp=="S")
                {
                    document.all.divSuppScore.style.left=20;
                    document.all.divSuppScore.style.top=t;
                    document.all.divSuppScore.style.display="block";
                    document.all.divAgaScore.style.display="none";
                 }
                 else if(strTyp=="A")
                {
                    document.all.divAgaScore.style.left=20;
                    document.all.divAgaScore.style.top=t;
                    document.all.divAgaScore.style.display="block";
                    document.all.divSuppScore.style.display="none";
                 }
                 
            }
            
            function ShowScoreHint()
            {        
             var lstTd=event.srcElement.parentNode.childNodes(event.srcElement.parentNode.childNodes.length-1)        
                lstTd.innerHTML="&nbsp;"+event.srcElement.getAttribute("value")+"分";
            }
            
            function ShowComment(sCGID)
            {
             alert(sCGID);
            }
            
            function doSavClkCnt(strType,strKeyID)
            {        
    document.all.divInputPass.style.display="none";
             doCallTheServer(strType+strSplit+strKeyID);
            }
            function doShowLevelInf(strKeyID)
            {   
             document.all.divInputPass.setAttribute("cgid",event.srcElement.getAttribute('cgid'));            
             document.all.divInputPass.setAttribute("uid",strKeyID);        
             document.all.divInputPass.setAttribute("dst",event.srcElement.getAttribute('dst'));
                var l=getActPos(event.srcElement,"left");            
                document.all.divInputPass.style.left=l+200;
                var t=getActPos(event.srcElement,"top");
                document.all.divInputPass.style.top=t;
                document.all.divInputPass.style.display="block";
           }
      

  5.   

    想法是好的。
    但是BS下,只要能看得见的就能够下载下来!
    再说,JS只有下载到客户端才能被执行。如果实在不想JS被客户直接下载,那就将JS加密,不过这个也不能彻底解决问题。
      

  6.   

    引用CS文件比如
    <script type="text/javascript" src="Default.aspx"></script> 
    在Default.aspx的cs里面写JS比如
            protected void Page_Load(object sender, EventArgs e)
            {
                Response.Write("function a()");
                Response.Write("{");
                Response.Write("alert('这个想法真无聊');");
                Response.Write("}");
            }
    在页面就可以使用<script type="text/javascript">a();</script> 来执行;
      

  7.   

    JS是在客户端执行,不可能不让人下载 不下载就以为着客户端也不能执行,那就失去了JS存在的意义
      

  8.   

    你的办法看都不需要看,看你的题目就知道接触B/S没几天或者根本不明白工作原理的~~~~1  这个是根本不能阻止的,客户端脚本必须到客户端执行,不管你用任何手段加了什么花样。
    2  这个是根本不需要也没有必要阻止的,你吃饱撑的阻止这个干吗? 这跟阻止别人看你网站上的图标没有本质区别。
    上面说的掩耳盗铃这个词,非常到位~~~  js只能混淆不能阻止下载的,而且混淆也就是骗骗和你这样不了解原理的,遇到个知道的,把你解混淆的那个函数拿来执行一下就出来了,你总是需要一个那样的函数,也必须让那个函数到达客户端,任何混淆都只是把eval 改成 document.write就可以知道你原来的代码,你混淆几次就解几次~~~~   
    改后缀名没有意义,因为就算你是需要服务器处理的,但是总是需要处理输出(不然这句代码就等于没作用),把你的输出字符串获取到就OK了。
    如果你要加大下载难度, 可以这么做:
    1 先修改http协议头,使浏览器不对该js的内容进行硬盘缓存(但是还是会在内存中缓冲一份用于执行的)
    2 用类似防盗链那样的httphandler来对js进行处理,并且把js放在另外一个域名下面,用引用地址来辨别合法的浏览器浏览。靠js文件和该站点的不同域名和防盗链来阻止大部分下载工具的下载行为。那样别人用下载工具也许就下载不来(因为很多下载工具是以目标文件作为http上下文的,而不是当前连接的站点),而正常的浏览器浏览,主流浏览器都会在http请求的头里面携带当前的浏览器状态信息,这些状态信息可以让你的httphandler把浏览器和下载工具区分开来,也可以把直接输入js地址请求文件的下载行为区分出来,但是依然无法阻止下载,只是使下载复杂了而已。 对知道你原理的人,自己简单写几行代码实例化一个请求对象并手工把请求地址和引用地址赋值为2个对应的不同的值就可以下载下来了。 我的方法是否比你的方法好得多(也复杂得多)??? 不过依然是阻止不了下载的,因为本质上,这个问题是无解的,如果你知道工作原理的话,你只能让对方变难少许而不能阻止
    楼主的天真想法是很好的~~~~~不过是实现不了的
      

  9.   

    注:上述的这个脚本我本省就没有用上述方法处理,我的回调脚本是config结尾的
      

  10.   

    [size=12px]新年好!!![/size]
    哈哈,首先非常感谢大家的讨论,上面这些所列出来的当然不是我的回调脚本~~~
    [
    引用CS文件比如 
    <script   type="text/javascript"   src="Default.aspx"> </script>   
    在Default.aspx的cs里面写JS比如 
                    protected   void   Page_Load(object   sender,   EventArgs   e) 
                    { 
                            Response.Write("function   a()"); 
                            Response.Write("{"); 
                            Response.Write("alert('这个想法真无聊');"); 
                            Response.Write("}"); 
                    } 
    在页面就可以使用 <script   type="text/javascript"> a(); </script>   来执行; 
    ]
    我的思路和这个老兄的想法有点象~我的脚本地址为:
    <script src="http://www.crossgo.com/ClientCall.aspx?temp=0.196879997941144&path=script*MainCallBack&type=config"></script>  其实就是在服务器端随机生成非缓存的客户端脚本内容,因为根本没有生成JS文件,所以理论上是不可能下载的,采用某些特殊方法也许可以下载下来,希望有朋友能找到方法哦.问题出发点:一般的JS脚本被下载下来是无所谓的,去做这件事情也确实很无聊的,如果部分处理逻辑在客户端完成,特别是回调脚本,这时候最好能控制JS下载了.
      

  11.   

    临时目录当然没有,你看到的那个js文件我就没有控制?用VS调试可以获得