强制动态加载的javascript不在google chrome上缓存
我正在使用GoogleMaps加载程序(使用GoogleMapsJavaScriptAPI)。我想在路径可用时动态地向路径添加点编辑:网页和javascript在本地存储和加载,而不是通过web服务器 为此,我创建了一个外部javascript文件,在其中放置了我想要使用的数据 我使用stackoverflow上其他地方的一个很好的技巧加载java脚本对象:强制动态加载的javascript不在google chrome上缓存,javascript,google-maps-api-3,browser-cache,dynamic-loading,Javascript,Google Maps Api 3,Browser Cache,Dynamic Loading,我正在使用GoogleMaps加载程序(使用GoogleMapsJavaScriptAPI)。我想在路径可用时动态地向路径添加点编辑:网页和javascript在本地存储和加载,而不是通过web服务器 为此,我创建了一个外部javascript文件,在其中放置了我想要使用的数据 我使用stackoverflow上其他地方的一个很好的技巧加载java脚本对象: function loadjsfile( filename, callback ) { var fileref = documen
function loadjsfile( filename, callback )
{
var fileref = document.createElement( 'script' );
fileref.setAttribute( "type", "text/javascript" );
fileref.setAttribute( "src", filename );
var done = false;
fileref.onload = fileref.onreadystatechange = function()
{
if( !done && ( !this.readyState
|| this.readyState == "loaded"
|| this.readyState == "complete") )
{
done = true;
// Continue your code
callback();
// Handle memory leak in IE
fileref.onload = fileref.onreadystatechange = null;
document.getElementsByTagName( "script" )[0].removeChild( fileref );
}
};
document.getElementsByTagName( "script" )[0].appendChild( fileref );
}
这非常有效,因为它会等待外部javascript实际加载后再继续初始化
这一切都很好,它装载得很好。然后我设置了一个5秒的超时,重新加载外部javascript文件。这就是我的问题所在。Google chrome正在从缓存中重新加载外部javascript文件,而不是直接进入磁盘。这是一个巨大的痛苦,因为这意味着我的地图路径不会随着时间的推移而更新。我真的需要它
当我刷新整个页面时,很好,它重新加载了javascript,但闪烁非常恼人(它迫使地图回到“初始”状态)。如果我每次都能强迫它重新加载javascript文件,那么这个新方法将非常有效
有人能帮我吗
<>我对JavaScript非常新(我主要是C++程序员),所以如果我问一些愚蠢的问题,请道歉:D/P > < P>你可以(如果你的文件是在Apache WebServer上托管的),将A.HTAccess文件添加到目录,包含你的脚本文件,内容是:
Header set Cache-Control "no-cache"
这将阻止缓存文件
还有其他方法可以发送这些标题信息。如果没有其他人有其他想法,请尝试在文件名中添加一个随机数作为查询字符串。这将告诉脚本文件是新的,应该强制重新加载 基本上每次生成一个随机数。
var rnd = Math.floor(Math.random()*80000);
所以您的代码看起来像
function loadjsfile( filename, callback )
{
var rnd = Math.floor(Math.random()*80000);
var fileref = document.createElement( 'script' );
fileref.setAttribute( "type", "text/javascript" );
fileref.setAttribute( "src", filename + "?r=" + rnd ); // note this line
// other code...
}
对不起,我应该说明这是从当地商店完成的。我已经更新了我的问题。如果你正在使用谷歌浏览器进行本地开发,那么在开发过程中禁用缓存。为此,请打开开发工具(ctrl+shift+i)并单击右下角的设置中心距。“常规”选项卡。禁用缓存。这似乎很有效。你能解释一下为什么会这样吗?如果我理解正确的话,它会向javascript发送一个查询,但我不明白为什么会强制重新加载。因为浏览器认为它是一个不同的文件,即由于URL的变化而动态生成的页面。我不确定浏览器是否会尝试缓存每一个随机url,但可能值得用一个较小的示例进行测试。好的,我想我明白了。作为发送到浏览器的查询,浏览器不知道服务器将返回什么。因此,它不可能使用缓存版本,因为查询可能返回完全不同的内容。但是,查询字符串只是被忽略,因为web浏览器不知道我没有做这么复杂的事情。是吗?@Goz,是的,你找到了:)一个查询字符串可能会产生不同的内容,因此浏览器不会缓存它。不要忘记,如果你担心两次命中同一个数字,你也可以通过增加乘数来增加随机大小:)讨厌挑剔,但是使用随机数仍然有机会(不管它有多小)提供缓存版本。新建日期().getTime()可能更好。