在Chrome中以编程方式重新加载JavaScript资源

时间:2014-08-03 18:34:33

标签: javascript google-chrome

我试图在Chrome中以编程方式重新加载javascript资源,如果我从控制台运行它,那么它工作正常,但是如果我把它放到代码中以在事件被触发后重新加载,那么资源不会&# 39;改变。有什么问题?

我使用这个重新加载器:

var docHeadObj = document.getElementsByTagName("head")[0];
var dynamicScript = document.createElement("script");
dynamicScript.type = "text/javascript";
dynamicScript.src = 'js/resource.js';
docHeadObj.appendChild(dynamicScript);

这是事件处理程序:

obj.onclick(function(){
    var docHeadObj = document.getElementsByTagName("head")[0];
    var dynamicScript = document.createElement("script");
    dynamicScript.type = "text/javascript";
    dynamicScript.src = 'js/resource.js';
    docHeadObj.appendChild(dynamicScript);
});

在两种情况之后,新的和正确的<script>元素被附加到<head>并且在网络选项卡上下载资源,但是在第二种情况下,资源永远不会改变。

编辑:

我更接近问题了。如果我在资源中有这个代码将被重新加载alert("aaa"); 然后我打开应用程序,然后在执行点击事件后,我收到一个警告,其中包含3&#39; a&#39;信件。然后我将字母数减少到2,重新加载资源,执行点击事件,然后我再次看到3&#39; a&#39;信件。然后我将字母数减少到1,保存并点击,然后我看到2&#39; a&#39;信件。所以它似乎是Chrome(以及FF)存储最后修改过的资源,除非我从控制台重新加载它。

2 个答案:

答案 0 :(得分:0)

在使用脚本之前,您应该等待脚本加载。可以使用动态脚本

onload事件来实现
function loadScript(url, callback) {
    var docHeadObj = document.getElementsByTagName("head")[0];
    var dynamicScript = document.createElement("script");
    dynamicScript.type = "text/javascript";
    dynamicScript.src = url;

    // bind the event to the callback function
    dynamicScript.onreadystatechange = callback; //for ie<9
    dynamicScript.onload = callback;

    // Fire the loading
    docHeadObj.appendChild(dynamicScript);
}


var testJQuery = function () {
    console.log($(this));
};

var obj = document.getElementById("test");
obj.onclick = function () {
    loadScript("//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js", testJQuery);

};

Working example on fiddle

答案 1 :(得分:0)

如果您只是在重新加载之前删除了脚本标记的最后一个实例,那么应该强制它重新加载。

$timestamp = (Get-Date -UFormat %s)