Javascript Drupal正在随机加载旧版本的脚本

Javascript Drupal正在随机加载旧版本的脚本,javascript,drupal,drupal-6,Javascript,Drupal,Drupal 6,在Drupal6中,我编写了一个模块,它输出一些html,我使用hook_块在块中显示这些html 有一个js文件,我只想在该块加载时加载,所以我是drupal\u add\u js(),在hook\u块中 除了这个问题之外,所有这些都正常工作:当您刷新页面时(无论是否同时清除缓存),通常会加载旧版本的脚本。新版本和旧版本似乎是随机出现的 如何确保加载了正确的版本?谢谢 编辑:我通过主题的.info文件加载的一个样式表也在做同样的事情——加载它的随机版本。因此,这看起来像是一个与模块或块无关的一

在Drupal6中,我编写了一个模块,它输出一些html,我使用hook_块在块中显示这些html

有一个js文件,我只想在该块加载时加载,所以我是drupal\u add\u js(),在hook\u块中

除了这个问题之外,所有这些都正常工作:当您刷新页面时(无论是否同时清除缓存),通常会加载旧版本的脚本。新版本和旧版本似乎是随机出现的

如何确保加载了正确的版本?谢谢


编辑:我通过主题的.info文件加载的一个样式表也在做同样的事情——加载它的随机版本。因此,这看起来像是一个与模块或块无关的一般性问题。

除非您对javascript文件感到满意,以便它可以被锁定并在缓存中使用,否则请使用drupal\u add\u js的'defer'和'cache'参数

在admin>>performance中,您会发现包含js和css的指令-如果它们被停用,那么drupal添加的每个文件都会发出一个请求。例如,如果js的preprocess设置为true,那么所有.info javascripts和drupal_add_js添加的脚本将缝合在一起成为:一个优化的深度缓存脚本

< 7.0 7.0 > 在您的情况下,如果您正在开发脚本或需要在每次加载时推送一个新脚本,则在所有情况下,在
$cache
$preprocess
下使用false,因此加载“main.js”看起来像:

drupal_add_js(base_path() . '/sites/default/files/myjs/main.js', 
     'core', 
     'header', 
     false, 
     false, 
     false
);

在v7+func中,argv[1-X]将简单地放在一个关联数组中,作为
$options

我不是drupal专家,但您尝试过drupal\u add\u js('yourfile.js?ver=123456')?谢谢。硬编码版本号听起来好像不可能是正确的。这意味着在style或js上工作的人在进行更改时必须破解php。。。看起来不像drupal的方式……您可以使用另一个主题中提到的解决方案:这不是一个好方法,不。“问题”在于drupal中的内部服务器缓存机制。在drupal管理中单击“清除缓存”可能会刷新内容,对吗?更改src href on script标记将强制重新呈现缓存(如果get参数为random==每个请求都会生成缓存,则为坏)。此外,它还将强制客户端浏览器缓存创建一个全新的条目。请参阅下面的如何避免这种解决方法。要避免客户端缓存机制,请按照JoniThat的答案进行操作,我最后做了什么,它起了作用,所以我勾选了它。谢谢你的详细解释!但这看起来还是有点像黑客——必须在部署到生产环境时将参数更改为drupal_add_js……如果您处于生产模式,您真的不应该这样做,您的脚本正在更改?如果您正在开发,只需转到这里:admin/settings/performance,并在“优化javascript”中勾选no。。如果是这样的话,那么rest就不是drupal了——而是您的apache/iis/任何设置缓存控制头的东西——我没有想到apache,但这是有道理的——我们在样式表上得到了相同的行为,尽管对这两种样式表都取消了优化。像这样坐着;浏览器的实时视图和缓存视图、服务器和文件对象(无论是php、asp还是js css)。标题
Expires,Cache Control,ETag,Last Modified,Date
然后在浏览器和服务器之间进行通信-如果服务器版本较新,则浏览器缓存视图-浏览器将获取新的。但仅当您在浏览器中调用“强制刷新”时,如
CTRL+r
。否则,浏览器往往从不询问服务器是否有新版本
drupal_add_js($data = NULL, $options = NULL)
drupal_add_js(base_path() . '/sites/default/files/myjs/main.js', 
     'core', 
     'header', 
     false, 
     false, 
     false
);