我试图在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)存储最后修改过的资源,除非我从控制台重新加载它。
答案 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);
};
答案 1 :(得分:0)
如果您只是在重新加载之前删除了脚本标记的最后一个实例,那么应该强制它重新加载。
$timestamp = (Get-Date -UFormat %s)