在不影响用户体验的情况下清除和重新加载页面中的脚本的方法是什么?

时间:2015-08-01 09:37:41

标签: javascript

我希望使用setTimeout()清除并重新加载我的应用程序中的脚本,而无需刷新页面或执行任何可能影响用户体验的操作。这可能吗?

注意:我正在使用我的脚本插入html和css代码,因此我的html也必须以某种方式重新加载,否则我的脚本将继续在页面中重新加载越来越多的元素。

2 个答案:

答案 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);
}

有很多不同的语法选项,你必须找到最接近你当前代码的那个并继续使用它。