2011-03-12 45 views

回答

8

下面是创建一个新的脚本元素的功能。它附加一个递增的整数,以使脚本的URL唯一(如Kon建议的)以强制下载。

 
var index = 0; 
function refreshScript (src) { 
    var scriptElement = document.createElement('script'); 
    scriptElement.type = 'text/javascript'; 
    scriptElement.src = src + '?' + index++; 
    document.getElementsByTagName('head')[0].appendChild(scriptElement); 
} 

然后在Firebug的控制台,您可以称呼其为:

 
refreshScript('my_script.js'); 

你需要确保该指数本身并不是剧本正在被重新装入的部分!

Firebug Net面板将帮助您查看脚本是否正在下载。响应状态应该是“200 OK”而不是“304 Not Modified”,并且您应该在查询字符串中看到索引

Firebug HTML面板将帮助您查看script元素是否被添加到头部元素

更新:

下面是使用时间戳,而不是一个索引变量的版本@davyM表明,它是一个更灵活的方法:

 
function refreshScript (src) { 
    var scriptElement = document.createElement('script'); 
    scriptElement.type = 'text/javascript'; 
    scriptElement.src = src + '?' + (new Date).getTime(); 
    document.getElementsByTagName('head')[0].appendChild(scriptElement); 
} 

阿列克谢的点也非常-stated。

+0

我会使用时间(新日期()。getTime())而不是索引(删除全局变量的需要)。如果你刷新相同的脚本,你甚至可以创建一个书签。 – 2011-03-12 21:17:37

+0

@davyM,好主意。我会更新。 – inkfist 2011-03-12 21:24:55

+0

+1。请注意,重新加载脚本不会更新已加载的evry对象。您可能遇到使用旧版本功能(即回调/关闭/存在对象)的有趣问题。 – 2011-03-12 22:01:33

0

如果您正在讨论您的.js文件的客户端/浏览器缓存的不幸情况,那么您可以简单地版本化.js文件。可以:

  • 重命名js文件本身(不是优选的)
  • 更新包括线引用yourfile.js 1,yourfile.js 2等。因此强制浏览器来请求?服务器的最新版本。 (首选)
+0

不,它不是缓存问题。我想刷新.js *而不刷新整个页面。有点像你如何通过Firebug快速编辑CSS,而不必每次都刷新页面来测试结果。不完全是这样,因为我确实想将更改保存在.js文件中 - 但重点是我不想刷新整个页面。 – Susan 2011-03-12 19:54:49

+0

除了标准的调试实践(例如评估表达式,检查值等)外)我不知道你如何做你想做的事。不幸的是,重新加载整个页面是最好的选择。 – Kon 2011-03-12 20:22:16

0

不幸的是,您必须刷新网页才能看到对JavaScript进行的编辑。我不知道如何实时编辑JavaScript,并且无需刷新即可看到这些编辑效果。

您可以使用Firebug插入新的 JavaScript,并对DOM对象进行实时更改;但是你不能编辑已经运行的JavaScript。

+0

我知道你可以通过Firebug编辑css和html,但我没有看到.js文件是如何编辑的? – Susan 2011-03-12 20:02:45

+0

点击“控制台”并将你的js代码粘贴在右侧面板上。 – 2011-03-12 20:07:31

+0

@Susan对不起,这是一个糟糕的词选择;我的意思是你可以使用Console选项卡编写你的JS,并且能够实时显示你的变化。我编辑我的答案是更具体。 – Moses 2011-03-12 20:08:19

相关问题