重新加载div时重新运行js

时间:2011-11-22 01:15:39

标签: javascript

当div重新加载时,如何重新运行js文件?

在头脑中,我有这个脚本:

<script type="text/javascript">  
  var auto_refresh = setTimeout(  
  function ()  
  {  
    $('#scoreboard').fadeIn("slow");  
  }, 3000); // refresh every 10000 milliseconds  
</script>  

在正文中,我有这个div和js文件:

<div id="scoreboard">  
  <script language="javascript" 
src="http://www.sportsnetwork.com/aspdata/clients/cbaskscoreboard.aspx?team=B87">
</script>  
</div>  

我想在定时间隔内重新运行javascript文件。可以吗?

3 个答案:

答案 0 :(得分:3)

如何重新运行javascript文件:

使用JQuery:

$.getScript("my_javascript.js", function(){

   alert("Script loaded and executed.");
   // Here you can use anything you defined in the loaded script
});

有关其工作原理的详细信息:How do I include a JavaScript file in another JavaScript file?

答案 1 :(得分:1)

这是错误的做法。

您应该在<head><body>底部添加一个脚本文件。该脚本文件应该定义一个您可以调用的函数。现在,您可以直接通过setTimeout

调用此功能

说JS文件有这个:

var sayHello = function() {
  alert('Hello!');
};

现在包含这样的文件:

<head>
  <script type="text/javascript" src="myscript.js"></script>
</head>

现在将超时代码更改为:

var auto_refresh = setTimeout(function() {  
  $('#scoreboard').fadeIn("slow");
  sayHello();
}, 3000);

这是一个很好的做法,永远不要包含一个javascript文件“做”的东西,因为你发现它很难让它再次做到这一点。相反,它应该定义函数或对象,可以根据需要多次调用它们。

答案 2 :(得分:0)

我同意Squeegy的说法,你最好的解决办法是调用一个函数,但如果你不是所包含脚本的作者并且必须找到解决方案,我会建议一些事情:

[编辑11月22日12:27 pm]
现在,我更好地理解您尝试从中提取的页面是一个返回document.write的脚本。我认为有两个选项。我已经在这里插入了一些细节,并将我原来的帖子留给了后人。

选项1:

  • 在您的域上创建包含该脚本的页面。例如,它可以被称为www.yourdomain.com/sportsnetwork/B87/
  • setInterval函数中构建一个iframe作为源代码,然后将其注入记分板<div>

选项2:

  • 在您的域上创建一个页面,该页面将解析sportsnetwork.com页面,删除document.write并传回html。
  • setIntercal函数中发出ajax请求以获取html并将其插入到记分板<div>中。

原始选项不适用于document.write

var auto_refresh = setInterval(  
  function () {  
    $('#scoreboard').fadeIn("slow");
    var unique = Date.now();
    var scriptFile = document.createElement('script');
    scriptFile.type = 'text/javascript';
    scriptFile.async = true;
    scriptFile.src = 'http://www.sportsnetwork.com/aspdata/clients/sportsnetwork/pullouts/logoscores/cbaskscoreboard.aspx?team=B87&unique=' + unique;
    var s = document.getElementsByTagName('script')[0]; 
    s.parentNode.insertBefore(scriptFile, s);
  }, 3000);

这将每隔3秒向页面添加一个新脚本,浏览器会认为由于unique标记而认为它是一个不同的脚本。我认为你可能需要根据脚本的重新加载来重新设置淡入淡出的时间。