2015-06-25 17 views
1

首先我加載外部JavaScript和下面的代碼(它附加ext_chat.js腳本源到當前的DOM)文件:如何始終刷新由AJAX加載文件,避免了緩存的文件

var protocol = ('https:' == document.location.protocol ? 'https://' : 'http://'); 
(function(d, t, p) { 
    var g = d.createElement(t), 
     s = d.getElementById('Chat_Script'); 
    g.src = p + 'mydomain.lc/js/ext_chat.js'; 
    s.parentNode.insertBefore(g, s.nextSibling); 
}(document, 'script', protocol)); 

ext_chat.js內。這裏我包括CSS文件:

function r(f) { 
/in/.test(document.readyState) ? setTimeout('r(' + f + ')', 9) : f() 
} 

r(function() { 
    includeCSSfile(getBaseUrl() + '/css/ext_chat.css')); // getBaseUrl() gives correct url 
}); 

function includeCSSfile(href) { 
    var head_node = document.getElementsByTagName('head')[0]; 
    var link_tag = document.createElement('link'); 
    link_tag.setAttribute('rel', 'stylesheet'); 
    link_tag.setAttribute('type', 'text/css'); 
    link_tag.setAttribute('href', href); 
    link_tag.setAttribute('media', 'screen'); 
    head_node.appendChild(link_tag); 
} 

在第一次加載時,CSS文件包含在內。在第一次加載頁面後,所有對ext_chat.css文件的更改都不會反映出來,並且正在使用緩存文件。 如何強制每次加載頁面時重新加載CSS文件,而不是引用緩存的文件?

+0

它無需重新加載頁面是不可能的。也許你可以通過使用javascript –

+1

來做到這一點,而不是包含外部文件。如果你爲href添加一個時間戳,所以它是唯一的:'link_tag.setAttribute('href',href +'?timestamp ='+ Date。現在());' 如果你設置了?timestamp = 1234或者只是?1234不應該作出差異,它只需要是唯一的 – TheBalco

+1

'link_tag.setAttribute('href',href +「?ts =」+ new Date ().getTime());'可以工作 - 注意'Date.now()'是IE9 + – mplungjan

回答

2

首先,不要使用eval版本setTimeout。改爲使用.bind

/in/.test(document.readyState) ? setTimeout(r.bind(null, f), 9) : f() 

現在,爲了避免文件緩存,您應該在URI的末尾附加一個隨機查詢字符串。通常你會看到?v=123456789或類似的東西。在這種情況下,我們可以使用時間戳。

r(function() { 
    includeCSSfile(getBaseUrl() + '/css/ext_chat.css?v=' + Date.now())); // getBaseUrl() gives correct url 
}); 

閱讀材料:

+1

感謝您的幫助和很好的回答。儘管如此,爲什麼在html文檔中包含css文件並不使用緩存,而是在外部JavaScript文件中完成時 - 它確實如此。 – Joe

相關問題