2009-08-08 83 views
4

我使用动态脚本标记从外部域请求javascript。有时候请求会花费太长时间;如果请求花费太长时间,是否可以停止请求或超时?Javascript:“取消”动态脚本标记?

我不想使用xmlhttprequest,因为我想避免使用服务器端代理。

谢谢!

+0

定义“动态脚本标签” – 2009-08-08 00:41:50

+1

我认为他们的意思是脚本标记是本身通过现有脚本写入页面(以便即时加载新脚本)。 – Amber 2009-08-08 00:44:02

+0

yes dav is right – rawrrrrrrrr 2009-08-08 00:49:39

回答

0

说到动态添加脚本有不同的方式,一种方法是在DOM准备就绪时将<script>节点附加到文档的主体,然后在需要长时间加载时将其删除。 。

<html> 
    <head> 
    <title>bla</title> 
    <script type="text/javascript"> 
     function init(){ 
     var max_time = 2000 //in milliseconds 
     g_script_url = "http://yoursite.net/script.js"; 
     var script = document.createElement("script"); 
     script.setAttribute("src",script_url); 
     script.setAttribute("type","text/javascript"); 
     document.body.appendChild(script); 

     g_timeout=setTimeout(function(){ 
      var scripts = document.getElementsByTagName("script"); 
      for (var i=0; i < scripts.length; i++){ 
      if (scripts[i].src == script_url){ 
       document.body.removeChild(scripts[i]); 
      } 
      } 
      },max_time); 
     } 

    window.addEventListener("DOMContentLoaded", init, false); 
    </script> 
    </head> 
    <body>bla bla [...]</body> 
    </html> 

然后你就可以添加一个指令在动态加载脚本的末尾以清除超时:

/* end of http://yoursite.net/script.js's code */ 
clearTimout(g_timeout); 

注:

document.addEventListener并不在IE浏览器,如果你想要一个跨平台的解决方案使用jQuery的方法$(document).ready或看看Document ready equivalent without JQuery

+1

这似乎不起作用。我创建了一个睡眠10秒的脚本,然后将其作为脚本src返回并插入,并且不会取消请求。 – 2010-08-30 19:24:18