2012-12-30 59 views
5

据我了解,一个项目是否是由Web浏览器缓存由以下因素决定:浏览器缓存

  1. 什么响应头告诉浏览器做的(例如, ,Cache-ControlExpires)。
  2. 验证器的存在(例如,ETag或Last-Modified标头)。

这对于从网络文件共享服务的文件有何不同?跨越不同的浏览器?考虑这个JavaScript包括:

<script type="text/javascript" src="\\SOMECOMPUTER\folder\file.js"></script> 

将浏览器服从meta标签像这样在网络文件被卷入?

<META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 31 Dec 2011 11:12:01 GMT"> 

我在这个主题上找到了很少的文档。

+2

这不会回答你的问题,但它是我我会尽量避免这样的链接,而是确保Web服务器可以通过服务器上的路径访问共享,例如'http:// intranet/files'实际上可能是'z:\ SomeShare'这是映射到'\\ SomeComputer \ files'的网络驱动器 – prodigitalson

+0

不幸的是,避免文件共享部署不是我们的选择。我们正在将一个JS沉重的Web应用程序部署到IT部门授权的内联网上,以便我们可以放置东西。有时可以使用Intranet Web服务器,但更常见的情况是不可用。 –

+0

HTTP控制缓存 - 通过不使用Web服务器,HTTP为您做的所有事情都会跳出窗口。 –

回答

1

只有在通过HTTP协议发送文件时才会考虑HTTP标头。文件访问(本地和网络共享)不通过HTTP,因此无法用此控制缓存。

HTML文件具有带meta标签的<head>部分中的高速缓存控件。所以,如果你想控制.html文件的缓存,你可以这样做。上述不幸的是.js文件不是这样,你不能通过这种方式控制js文件缓存。

我会推荐2种选择:

  • 建立一个小型的HTTP服务器,并获取从那里.js文件 - 这种方式,您面包车控制由HTTP头中的高速缓存超时
  • 在线将您的JavaScript代码转换为HTML页面(标记为<script>...</script>),并通过<meta>标签控制缓存。通过这种方式,您可以在<div src="\\server\cachedfile.html" \>中加载该文件 - 加载后,div甚至可以隐藏。

我认为第二种选择更好,因为<meta>缓存控制更可靠,甚至更可控。

4

编辑:实际做了一些更多的测试之后,您可以通过IE8,Firefox和Google以这种方式访问​​文件,假设设置了适当的权限,对于之前的混淆抱歉。

现在,它只是回到它会缓存Java脚本文件(或任何真正的)的问题,这是肯定的。因此,这里是你如何能解决这个问题:

Using <meta> tags to turn off caching in all browsers?(这似乎为我工作得很好,因此看来,浏览器会听网络文件这样的meta标签)

How to force IE to reload javascript?(这个作品就像如何您将通过将时间附加到未使用的变量来避免缓存ajax调用)