Chrome不会显示在HTML页面中动态加载的外部JS文件的更新内容

时间:2012-05-24 11:17:55

标签: javascript html

我遵循简单的HTML和JS代码。当用户选择意大利语语言选项时,JS代码会动态加载外部JS文件language_it.js

<html>
<head>

<script>
function ChangePageLanguage()
{
var e = document.getElementById("langDD");
var lang = e.options[e.selectedIndex].value;

if (lang == "it")
{
    var scrptE = document.createElement("script");
    scrptE.setAttribute("type", "text/javascript");
    scrptE.setAttribute("language", "JavaScript");
    scrptE.setAttribute("src", "language_it.js");
    var head = document.getElementsByTagName("head")[0];
    head.appendChild(scrptE);
}
}
</script>
</head>

<body>
<select onchange="ChangePageLanguage()" id="langDD">
    <option value="en">English</option>
    <option value="it">Italian</option>
    </select>
</body>
</html>

language_it.js有以下代码行:

alert ("Italian");

它在Firefox中工作正常,但如果我更改language_it.js的内容,则Chrome除非重新启动Chrome中的index.html页面,否则不会显示更新的内容。这个问题有什么解决方案吗?

3 个答案:

答案 0 :(得分:7)

在Chrome上进行开发时,您可以停用缓存

  • 按F12打开开发人员工具。
  • 点击右下角的齿轮图标。
  • 选中“禁用缓存”。
  • 重新加载页面。

答案 1 :(得分:5)

如果您的缓存阻止您的脚本正确更新,或者您需要在生产中始终将其解除,则可以始终执行以下操作:

scrptE.setAttribute("src", "language_it.js?" + (Date.now() % 10000));

这会附加一个基于时间的数字字符串,几乎总是会在URI的末尾给你一个唯一的数字,这应该会阻止浏览器从缓存中检索文件。

答案 2 :(得分:2)

如果您只需要在开发期间刷新.js文件,请像Joseph建议的那样禁用缓存。

如果你需要每次调用JavaScript文件(例如,如果你动态生成它),你可以在文件名中添加一个唯一的查询字符串,这将导致浏览器每次都检索它: / p>

scrptE.setAttribute("src", "language_it.js?ticks=" + new Date().getTime());​