由于浏览器不刷新脚本,Javascript调试很困难!

时间:2010-10-02 09:00:46

标签: javascript ruby-on-rails mootools

我正在尝试调试用Mootools框架编写的Javascript。现在我正在开发一个基于Rails的Web应用程序,我的web服务器是启动WEBrick的rails。

当我修改一个在mootools init脚本中调用的特定tree.js文件时,

    require: {
        css: [MUI.path.plugins + 'tree/css/style.css'],
        js: [MUI.path.plugins + 'tree/scripts/tree.js'],
        onload: function(){
            if (buildTree) buildTree('tree1');
        }
    },

由于发送到客户端的标题是Last Modified:2010年7月10日,所以未加载更改.....由于我刚刚修改了文件,因此显然不正确。

如何摆脱这种烦人的缓存。如果我直接浏览我的浏览器(Chrome)中的脚本,直到我点击刷新才会显示更改,但是当我回到我的应用程序并点击刷新时,这并不能解决我的问题,它仍会加载前修改过的脚本。

3 个答案:

答案 0 :(得分:2)

这也发生在FF中,我认为它是由服务器或浏览器本身发送的缓存头。 无论如何,在开发过程中避免此问题的一种简单方法是在脚本的文件名中添加一个随机参数。

而不是调用'tree/scripts/tree.js'使用'tree/scripts/tree.js?'+random,这会使所有缓存失效。

答案 1 :(得分:0)

正如frisco所说,在开发中添加一个随机数就可以了,但你可能会发现这个问题仍会影响你的生产。您希望将新的JavaScript更改推送给您的用户,但直到他们的浏览器停止缓存该文件时才能这样做。为了做到这一点,只需获取文件mtime并将其添加为随机字符串。这只会在文件被修改时发生变化,因此如果JavaScript尚未更改,或者将从服务器加载,如果它已经加载,则将从缓存加载JavaScript。

PHP有函数filemtime,但由于我不熟悉Ruby,我恐怕无法帮助你朝这个方向前进(抱歉!)。但是,this answer似乎可以达到你想要的效果。

答案 2 :(得分:0)

尝试Ctrl + F5技巧。为了避免触及浏览器缓存。

更多信息: What requests do browsers' "F5" and "Ctrl + F5" refreshes generate?