如何强制IE重新加载javascript?

时间:2009-05-15 01:08:54

标签: javascript internet-explorer internet-explorer-8

我在Vista上使用IE 8,每次我更改javascript文件然后开始调试时,我必须按Ctrl + F5才能重新加载我的javascript。有没有什么方法可以让我在开始调试时自动重新加载javascript,但是在浏览网页时不会失去性能提升?

是的,我知道你可能不喜欢IE,但请记住问题不是“什么是最好的浏览器?”。

10 个答案:

答案 0 :(得分:48)

在网址末尾添加一个字符串以中断缓存。我通常(使用PHP):

<script src="/my/js/file.js?<?=time()?>"></script>

因此,每当我正在处理它时它会重新加载,然后在它投入生产时将其取下。实际上,我把它抽象出来了一点,但这个想法仍然是一样的。

如果您查看本网站的来源,他们会以类似的方式在网址末尾附加修订号,以便在更新javascript文件时强制更改。

答案 1 :(得分:25)

Paolo的总体想法(即有效地改变请求uri的某些部分)是你最好的选择。但是,我建议使用更静态的值,例如更改脚本文件时更新的版本号,这样您仍然可以获得缓存的性能提升。

所以要么是这样的:

<script src="/my/js/file.js?version=2.1.3" ></script>

或者

<script src="/my/js/file.2.1.3.js" ></script>

我更喜欢第一个选项,因为这意味着您可以维护一个文件,而不必不断地重命名它(例如,在源代码管理中维护一致的版本历史记录)。当然,任何一个(正如我所描述的那样)都会涉及每次更新include语句,因此您可能想要采用动态方式来实现它,例如每次部署时用动态替换固定值(使用Ant或其他)。

答案 2 :(得分:16)

当您使用网页或javascript文件时,您希望每次更改时都重新加载它。您可以在IE 8中更改设置,以便浏览器永远不会缓存。

按照这个简单的步骤。

  1. 选择工具 - &gt;互联网选项。
  2. 在“常规”选项卡中,单击“浏览历史记录”部分中的“设置”按钮。
  3. 点击“每次访问网页时”单选按钮。
  4. 单击“确定”按钮。

答案 3 :(得分:5)

如果您希望在您的浏览器上执行此操作(a.k.a.而不是强制用户),那么我不会将您的代码设置为不使用缓存。正如何塞所说,有一个表现损失。

我不会完全关闭IE上的缓存,因为您访问的每个网站都会失去性能提升。您可以告诉IE始终从服务器刷新特定站点或浏览会话:

  1. 打开IE开发人员工具
  2. 从菜单中选择缓存
  3. 点击查看“始终从服务器刷新”
  4. 或者,对于键盘 - 快捷方式 - philes(像我一样)那里..

    • F12,Alt + C,向下箭头,Alt + R.

    注意事项: 说到这一点......请记住,无论何时以不同的方式开发/测试将在生产中查看网站,您都有可能获得混合结果。一个很好的例子是这个缓存问题。我们发现了一个问题,即IE缓存了我们的Ajax调用,而不是更新GET方法的结果。如果我们在IE中禁用缓存,我们就不会在开发中看到这个问题,并且会将它部署到这样的生产中。

答案 4 :(得分:1)

在javascript中我认为这是不可能的,因为现代浏览器在javascripts中有一个policy on security ..清除缓存是非常违反的。

您可以尝试添加

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">

在标题中,但是您会失去性能。

答案 5 :(得分:1)

这应该是ASP.NET的技巧。这个概念与PHP示例中显示的相同。由于每次加载脚本时URL都不同,因此代理浏览器都不应该缓存该文件。 我习惯把我的JavaScript代码放到单独的文件中,并浪费了大量的时间用Visual Studio,直到我意识到它不会重新加载JavaScript文件。

<script src="Scripts/main.js?version=<% =DateTime.Now.Ticks.ToString()%>" type="text/javascript"></script>

完整示例:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">

   <script src="Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>  
   <script src="Scripts/main.js?version=<% =DateTime.Now.Ticks.ToString()%>" type="text/javascript"></script>
    <script type="text/javascript">

        $(document).ready(function () {
                                myInit();
                          });

    </script>
</asp:Content>

显然,此解决方案只应在开发阶段使用,并应在发布网站之前删除。

答案 6 :(得分:0)

要在开发网站时无需在IE标签中反复按F5,请使用ReloadIt

enter image description here

对于IE中显示的每个网页,您可以配置文件名,目录或一组。如果在任何这些配置的路径中发生任何更改,ReloadIt将刷新IE选项卡。一个简单的工具。它只是有效。

这将重新加载所有内容,而不仅仅是javascript。

答案 7 :(得分:0)

在网址末尾添加js文件的修改日期。使用PHP,它看起来像这样:

echo '<script type="text/javascript" src="js/something.js?' . filemtime('js/something.js') . '"></script>';

每次更新脚本时都会重新加载脚本。

答案 8 :(得分:0)

如果您正在运行ASP.Net,请查看ASP.Net 4.5中提供的Bundling and Minification模块。

http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification

您可以声明指向您的javascript文件的“捆绑”。每次文件更改时,它都会生成一个新的查询字符串后缀...但只有在文件更改时才会这样做。这使得部署更新变得非常简单,因为您甚至不必考虑使用新版本号更新标记。

它还可以将多个.js文件捆绑在一起,并将其缩小,一步到位。同上css。

答案 9 :(得分:0)

如果您使用的是IE11,则可以使用IE开发人员工具告诉IE始终从服务器刷新以进行特定的浏览会话。

  • 使用F12键打开IE开发人员工具
  • 转到“网络”标签
  • 单击“始终从服务器刷新”按钮

button always refresh from the server

(对不起,法国人被俘)