执行的时候没有把那个js完全载完,加个alert就相当于延时了,把要加载的那个js改改看
另外,我刚才试过,新加载的js是在本代码段后面,若要取里面的变量就会出错

解决方案 »

  1.   

    试试
    script.defer= true;
      

  2.   

    我有了个笨办法
    在下面再加一个空的rs就行了
    <script language='javascript' src='empty.js'></script>
      

  3.   

    可以试试孟子的方法,给动态生成的Script加上defer属性。
      

  4.   

    不是延时的问题,不alert一下,愣是不执行
    有一个固定的<script src=''></script>就都执行了
      

  5.   

    是不是类似这样的意思?
    t.js
    alert('test');t.htm
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head>
    <body>
    <script id="testjs" language="JavaScript" type="text/JavaScript"></script><script language="javascript">
      var url = "t.js";
      document.getElementById("testjs").src = url;
    </script></body>
    </html>
      

  6.   

    没有固定JS标签的:
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head>
    <body>
    <script language="javascript">
      var url = "t.js";
      var js = document.createElement("SCRIPT");
      js.language = "javascript";
      js.defer = true;
      js.src = url;
      document.body.appendChild(js);
    </script></body>
    </html>
      

  7.   

    有几个方法你都可以试试,1。直接链接地址script.src=...,这样的话只需要注意一点,要得到此标签的readyState值,如果偷懒不想得到值的话,可以用window.setTimeout(fun,2000)这样的延时来获得充分的时候,使得readyState得以触发这个handler。2。用defer属性,但是在Mozilla里是不能这样做的。兼容性较差。IE可用3。用window.execScript()来执行代码,这样也不用再加一个script的标签了。window.execScript()在IE中是可执行的,但Mozilla没有此方法,可以用window.eval来代替。只需要用XMLHttpRequest来获取js然后window.execScript就可以了。
      

  8.   

    这是我写的一些代码,也许你可以试着用一下。加载包的代码http://blog.never-online.net/article.asp?id=65
      

  9.   

    index.htm文件代码
    ---------------------------------------------------
    <body>
    </body>
    <script language="javascript">
      var script = document.createElement('script');
      script.src = "aa.js";
      script.type = 'text/javascript';
      alert("ok");
      document.body.appendChild(script);
    </script>aa.js文件代码
    -----------------------------
    document.write("ok");
    像这样的,有alert("ok")就可以执行aa.js里的代码,如果没有alert这句话就不执行
      

  10.   

    可以啊,刚试过:
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head>
    <body>
    <script language="javascript">
      var url = "t.js";
      var js = document.createElement("SCRIPT");
      js.language = "javascript";
      js.defer = true;
      js.src = url;
      document.body.appendChild(js);
    </script></body>
    </html>t.js
    document.write("ok");
      

  11.   

    @dh20156(风之石)把t.js改成
    var foo=function(){
    document.write("OK");
    };你再试试看
      

  12.   

    a.jsvar foo=function(){
    document.write("OK");
    };<script language="javascript">function bar(u) {
    var x=window.ActiveXObject?new ActiveXObject("MSXML2.XMLHTTP"):new XMLHttpRequest();
    x.open("GET",u,false);
    x.send(null);
    s=x.responseText;
    try {window.execScript(s)}catch(ex){window.eval(s)};
    }
    bar("a.js");foo();</script>
      

  13.   

    用 BlueDestiny(这回真的准备要改名字了...) 的方法可行,但是出现个新问题,中文乱码
      

  14.   

    BlueDestiny,如果加载后马上运行是不行的,可以考虑延时或AJAX加载方式像你那种,也可以简单的在BODY的onload事件里处理(针对立即运行的),如:
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head>
    <body onload="test();">
    <script language="javascript">
      var url = "t.js";
      var js = document.createElement("SCRIPT");
      js.language = "javascript";
      js.defer = true;
      js.src = url;
      document.body.appendChild(js);
    </script>
    </body>
    </html>t.js
    var foo=function(){
    document.write("OK");
    }
      

  15.   

    用我的笨办法行了,哥们
    在下面加一个空的js,简单省事
    <script language='javascript' src='empty.js'></script>
      

  16.   

    呵呵,RoseKnife(阿楚),是我贴错了t.js
    你把foo改成test  ^_^
      

  17.   

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head>
    <body onload="test();">
    <script language="javascript">
      var url = "t.js";
      var js = document.createElement("SCRIPT");
      js.language = "javascript";
      js.defer = true;
      js.src = url;
      document.body.appendChild(js);
    </script>
    </body>
    </html>t.js
    var test=function(){
    document.write("OK");
    }再不行就无语了!
      

  18.   

    只能无语了! 错误:
     
    <body onload="test();">
      

  19.   

    BlueDestiny(这回真的准备要改名字了...) 
    快出来帮帮忙,怎么解决中文乱码的问题。
      

  20.   

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head><body>
    <script language="javascript">
      var url = document.location.href;
      if(url.indexOf("?")<0){
       url="http://127.0.0.1/js/articlelist.asp?url=www.sxfeiyang.com&id=3";
      }
      else{
      url = "http://127.0.0.1/js/articleList.asp" + url.substring( url.indexOf("?") );
      }
    function bar(u) {
    var x=window.ActiveXObject?new ActiveXObject("MSXML2.XMLHTTP"):new XMLHttpRequest();
    x.open("GET",u,false);
    x.send(null);
    s=x.responseText;
    try {window.execScript(s)}catch(ex){window.eval(s)};
    }
    bar(url);
    foo();
    </script>
    </body>
    </html>我用 BlueDestiny 的办法可以实现,就是显示中文乱码,快出来帮帮忙哦。
      

  21.   

    你先看我写的一篇文章http://blog.never-online.net/article.asp?id=73
      

  22.   

    @dh20156(风之石) 
    这个脚本解释有关的,你先运行这个,你就明白了。设a.js为
    var foo=function(){
    document.write("I am a.js content foo() function");
    };
    -----------------------------<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>never-online dynamic code test page</title>
    </head>
    <body>
    <pre>readyState的含义
     - uninitialized : 脚本对象刚被创建,脚本代码未载入;
     - loading : 脚本代码载入中;
     - loaded : 脚本代码完成读入,但尚未开始解释执行;
     - interactive : 解释执行过程中;
     - complete : 脚本已经执行完成。</pre>
    <div id="viewer"></div>
    <script type="text/javascript">window.onerror=function(msg,url,line){
      document.getElementById("viewer").innerHTML+='<p style="color:red">错误:'+msg+'line:'+line+'</p>';
      return true;
    }function bar(u) {
      var x=document.createElement("SCRIPT");
      x.src=u;
      x.defer=true;
      document.getElementsByTagName("HEAD")[0].appendChild(x);
    }
    bar("a.js");(function getReadyState(){
      var e=document.getElementById("viewer")
      var x=true;
      var a = document.getElementsByTagName("SCRIPT");
      for (var i=0; i<a.length; i++) {
        if (a[i].readyState=='complete' && x!=false) x=true; else x=false
        e.innerHTML+=(a[i].src?a[i].src+':':'noname:')+a[i].readyState+"<br />";
      }
      e.innerHTML+="<hr/>";
      if (x) window.clearTimeout(window.timer); else
      window.timer=window.setTimeout('getReadyState()',1000);
    }());foo();</script>
    <script type="text/javascript">
    //<![CDATA[
    foo();
    //]]>
    </script>
    </body>
    </html>
    @RoseKnife(阿楚) :
    中文乱码可以解决。但是要用到vbs,如果兼容性不是那么重要的话,用vbs解码  <script type="text/javascript">
      //<![CDATA[
    function bar(u) {
    var x=window.ActiveXObject?new ActiveXObject("MSXML2.XMLHTTP"):new XMLHttpRequest();
    x.open("GET",u,false);
    x.send(null);
    s=parseScript(x.responseText);
    try {window.execScript(s)}catch(ex){window.eval(s)};
    }
    function parseScript(jscode) {
      // --- toCurrentCharset(), by aimingoo 解码
        window.execScript(''+
         'Function Asc2Unicode(n) \n'+
         ' Asc2Unicode = Chr(n) \n'+
         'End Function \n'+     'Function SafeArray2Str(body) \n'+
         ' SafeArray2Str = CStr(body)\n'+
         'End Function','VBScript');    var r1 = /%u(..)(..)/g, r2 = /%([8,9,A-F].)%(..)/g;
        var toUnicode = function($0, $1, $2) {return Asc2Unicode(parseInt($1+$2, 16))}
        toCurrentCharset = function(body) {
          return unescape(escape(SafeArray2Str(body)).replace(r1, "%$2%$1").replace(r2, toUnicode));
        }; jscode=toCurrentCharset(jscode); 
    window.execScript(jscode, 'JavaScript'); //IE有效,vbs解码
    return jscode;
      } bar('a.js'); foo();
      //]]>
      </script>
      

  23.   

    BlueDestiny,测试了一下,输出:
    I am a.js content test() function有什么问题?
      

  24.   

    主要是看readyState,如果是在loading状态下,foo自然不可用。如果是complete状态下,foo是完全可以用的。上面那里有可能是会出错的,那一行我用红色的字标出来了,而出错的那行,你可以看看上面的readyState。当然你可以用a.js用更复杂的js来代替。
      

  25.   

    直接把这段换掉原来的bar函数  function bar(u) {
        function parseScript(jscode) {
        // --- toCurrentCharset(), by aimingoo 解码
          window.execScript(''+
           'Function Asc2Unicode(n) \n'+
           ' Asc2Unicode = Chr(n) \n'+
           'End Function \n'+       'Function SafeArray2Str(body) \n'+
           ' SafeArray2Str = CStr(body)\n'+
           'End Function','VBScript');      var r1 = /%u(..)(..)/g, r2 = /%([8,9,A-F].)%(..)/g;
          var toUnicode = function($0, $1, $2) {return Asc2Unicode(parseInt($1+$2, 16))}
          toCurrentCharset = function(body) {
            return unescape(escape(SafeArray2Str(body)).replace(r1, "%$2%$1").replace(r2, toUnicode));
          }; jscode=toCurrentCharset(jscode); 
          window.execScript(jscode, 'JavaScript'); //IE有效,vbs解码
          return jscode;
        }
        var x=window.ActiveXObject?new ActiveXObject("MSXML2.XMLHTTP"):new XMLHttpRequest();
        x.open("GET",u,false);
        x.send(null);
        s=parseScript(x.responseText);
        try {window.execScript(s)}catch(ex){window.eval(s)};
      }
      

  26.   

    <script language="javascript">
      var url = document.location.href;
      if(url.indexOf("?")<0){
      url="http://127.0.0.1/js/articlelist.asp?url=www.sxfeiyang.com&id=3";
      }
      else{
      url = "http://127.0.0.1/js/articleList.asp" + url.substring( url.indexOf("?") );
      }
    function bar(u) {
    var x=window.ActiveXObject?new ActiveXObject("MSXML2.XMLHTTP"):new XMLHttpRequest();
    x.open("GET",u,false);
    x.send(null);
    s=parseScript(x.responseText);
    try {window.execScript(s)}catch(ex){window.eval(s)};
    }
    function parseScript(jscode) {
      // --- toCurrentCharset(), by aimingoo 解码
        window.execScript(''+
         'Function Asc2Unicode(n) \n'+
         ' Asc2Unicode = Chr(n) \n'+
         'End Function \n'+     'Function SafeArray2Str(body) \n'+
         ' SafeArray2Str = CStr(body)\n'+
         'End Function','VBScript');    var r1 = /%u(..)(..)/g, r2 = /%([8,9,A-F].)%(..)/g;
        var toUnicode = function($0, $1, $2) {return Asc2Unicode(parseInt($1+$2, 16))}
        toCurrentCharset = function(body) {
          return unescape(escape(SafeArray2Str(body)).replace(r1, "%$2%$1").replace(r2, toUnicode));
        }; jscode=toCurrentCharset(jscode); 
    window.execScript(jscode, 'JavaScript'); //IE有效,vbs解码
    return jscode;
      }bar(url);
    foo();
    </script>这样写,还是乱码
      

  27.   

    a.htm 内容如下:<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>HtmL文件调用远程文件列表分页</title>
    </head><body>
    <script language="javascript">
    var url = document.location.href;
    if(url.indexOf("?")<0){
    url="http://127.0.0.1/js/articlelist.asp?url=www.sxfeiyang.com&id=3";
    }
    else{
    url = "http://127.0.0.1/js/articleList.asp" + url.substring( url.indexOf("?") );
    }
    function bar(u) {
    var x=window.ActiveXObject?new ActiveXObject("MSXML2.XMLHTTP"):new XMLHttpRequest();
    x.open("GET",u,false);
    x.send(null);
    s=parseScript(x.responseBody);
    try {window.execScript(s)}catch(ex){window.eval(s)};
    }
    function parseScript(jscode) {
    // --- toCurrentCharset(), by aimingoo 解码 这段是干什么用的?
    window.execScript(''+
     'Function Asc2Unicode(n) \n'+
     'Asc2Unicode = Chr(n) \n'+
     'End Function \n'+
     'Function SafeArray2Str(body) \n'+
     'SafeArray2Str = CStr(body)\n'+
     'End Function','VBScript');var r1 = /%u(..)(..)/g, r2 = /%([8,9,A-F].)%(..)/g;
    var toUnicode = function($0, $1, $2) {return Asc2Unicode(parseInt($1+$2, 16))}
    toCurrentCharset = function(body) {
    return unescape(escape(SafeArray2Str(body)).replace(r1, "%$2%$1").replace(r2, toUnicode));
    }; 
    jscode=toCurrentCharset(jscode); 
    window.execScript(jscode, 'JavaScript'); //IE有效,vbs解码
    return jscode;
    }bar(url);
    foo();
    </script>
    </body>
    </html>总算乱码正常了,但新问题又出现,第一次打开正常,点进下一页时候出现空白一片并报错,唉,这两天个是恶梦啊。----------------------
    行: 31
    字符:2
    由于出现错误80020101而导致此项操作无法完成
    代码:0
    Url: http://127.0.0.1/a.htm?PerPageSize=10&CurPage=2&url=www.sxfeiyang.com&id=3我还是先安装数据库到服务器上吧
      

  28.   

    唉,前功尽弃,原来安装到服务器上后不能调用的,真是郁闷。谢谢这两天帮助我的所有人们,衷心的感谢你们。基实我只是想怎样在本地调用 
    http://rosesoft.hongxin.cn/js/articlelist.asp?url=www.sxfeiyang.com&id=3
    这个页面,就是那个分页的问题。
      

  29.   

    其实用src调用或者是execScript调用都有优缺点。我在文章里也提到了。用window.execScript(eval)方法的弊端为不能很好的调试,必须把exception捕捉后给到上层的容器。而且会出现有的代码不能很好的解析(也就是你上面的异常错误,比如用a=[],就会有问题),还有中文处理等。优点是可以很好的配合使用,以及利用window对象做一个处理从而也能实现using方法等。用src方法是简单,但调用时必须有足够时间。这个方法的优点在某些方面也很明显,现在我也在写这个代码。可以动态的的载入并执行,实际上也是可以实现的,但是代码较多。写好后我发短消息pm你吧
      

  30.   

    经测试,没有发现你说的问题<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>无标题文档</title>
    </head><body>
    <script language="javascript">
      var url = 'test.js';//这里简化了你原来的url取值
      var script = document.createElement("script");
      script.language="JavaScript";
      script.type="text/JavaScript";
      script.src= url;
      document.body.appendChild(script);
    //  alert("xxx")  //问题就在这里
    </script>
    </body>
    </html>test.js
    alert('ok');
      

  31.   

    查看了你的原问题:http://community.csdn.net/Expert/topic/4928/4928649.xml?temp=.4017298你可以这样写
    <script src='http://127.0.0.1/js/articlelist.asp'></script><script language="javascript">
    var o = document.getElementsByTagName('script');
    var url = o[0].src.split('?')[0];
    /* 这里假定需要改变src的script标记为第一个,如不是则可用
    for(i=0; i<o.length; i++) {
      document.write(o[i].src+'<br>');
    }
    遍历
    *///取得地址栏url参数
    var param = location.search.substr(1);//组装成新地址
    url += '?'+param;//载入js
    o.[0].src = url;
    </script>