我希望使用setTimeout()清除并重新加载我的应用程序中的脚本,而无需刷新页面或执行任何可能影响用户体验的操作。这可能吗?
注意:我正在使用我的脚本插入html和css代码,因此我的html也必须以某种方式重新加载,否则我的脚本将继续在页面中重新加载越来越多的元素。
答案 0 :(得分:0)
没有某种黑客攻击是不可能的......我不建议做这样的事情。但你可以尝试这样的事情:
$('script').each(function() {
if ($(this).attr('src') !== 'assets/js/jquery.js') {
var source_old = $(this).attr('src');
// remove source
$(this).attr('src', '');
// set source again and avoid caching
setTimeout(function(){ $(this).attr('src', source_old + '?'+new Date()); }, 250);
}
});
除了Jquery之外,这将重新加载页面上的所有脚本。
答案 1 :(得分:0)
将要重新加载的所有内容(函数,变量,对象等)放在对象中,然后使用YourObject.FunctionName()调用它们;然后,您只需通过向标题添加新的脚本标记(代码示例中提供的功能),根据需要重新加载脚本,并使用时间戳来防止缓存。
<强> somefile.js 强>
YourObject = function()
{
self = this;
this.myvar1 = 1234;
this.yourvar2 = 1234;
this.reloadSeconds = 90;
this.FunctionName = function(){
//Do something Here
};
this.FunctionName2 = function(){
//Do something Else Here
};
this.reloadMe = function(){
var head= document.getElementsByTagName('head')[0];
var script= document.createElement('script');
script.src= '/path_to/somefile.js?timestamp=' + new Date().getTime();
head.appendChild(script);
};
setTimeout(function(){self.reloadMe()},self.reloadSeconds*1000);
}
有很多不同的语法选项,你必须找到最接近你当前代码的那个并继续使用它。