正如 sLaks 提到的那样,即使您更改脚本标签的 src 属性,它也无济于事。相反,我建议在您的第一个脚本文件中存储整个代码,只需确保您具有如下所示的模块模式
var yourModule = (function(){
function yourModule(){
...
}
//your helper functions here
function somehelper(){
....
}
yourModule.prototype.someFun1 = function(){ .. };
yourModule.prototype.someFun2 = function(){ .. };
return yourModule;
}());
仅举一个例子,我采用了这种模式。优点是如果您想禁用整个脚本,因为仅更改脚本不起作用
var xyz= new yourModule();
// start using xyz
// When you do not want yourModule anymore
yourModule = function(){ return false; } or null;
将清除该功能。
然后使用以下代码再次加载您的脚本
var handleRequest = function( ) { //!! set up the handleRequest callback
if(this.status != undefined) {
/* do something with the status code here */
}
if(this.readyState == 4) {
var script = document.createElement("script") ;
script.setAttribute("type","text/javascript") ;
var text = document.createTextNode(this.responseText) ;
script.appendChild(text) ;
var head = document.getElementsByTagName("head")[0] ;
head.insertBefore(script,head.firstChild) ;
}
} ;
var request ; //!! supposing you have a way to get a working XHR Object
//.. set the XHR Object
request.open("GET",url,true) ;
request.overrideMimeType("text/javascript") ;
request.onreadystatechange = handleRequest ;
request.send(null) ;
脚本加载由不同的专家在不同的问题中多次回答,如果您想通过 AJAX 加载它,这是我喜欢的解决方案(来自:动态创建脚本:readyState 永远不会“完成”)