2011-06-26 37 views
2

如果JavaScript的?隨機將是當前日期 - 它會每天只加載一次嗎?強制JavaScript每天只重新加載一次

<script type="text/javascript" src="http://external.example.com/bookmarklet.js?random"></script> 

我的問題的背景是,我不希望它永遠停留在緩存中,但我也在尋找一種方式來節省一些帶寬和速度的東西了。 謝謝

+2

爲什麼不使用緩存過期標題? – Pointy

+0

@Pointy,可能是因爲它不是100%跨瀏覽器的方式?或者他無法用這種方式調整服務器? – gaRex

回答

3

將日期或時間戳記添加到包含的js文件名的末尾,如果它已被用戶的瀏覽器緩存,它會重新加載自身。

如果你想用JavaScript來讓這個時間戳可以動態包括您的外部JS文件,像這樣:

 
var the_time = new Date(); 
var fileref=document.createElement('script'); 
fileref.setAttribute("type","text/javascript"); 
fileref.setAttribute("src", "test.js?" + the_time.getDate() + the_time.getMonth() + the_time.getFullYear()); 
document.getElementsByTagName("head")[0].appendChild(fileref); 

我選擇把從日,月,年的時間戳,所以它每天都會改變。

+0

謝謝你的例子。我試圖將其實現到我的代碼中。它是否正確? 'javascript:javascript:(function(){ var the_time = new Date(); new_script = document.createElement('SCRIPT'); new_script.type ='text/javascript'; new_script.src ='http: //example.com/js/bookmarklet.js?x='+ the_time.getDate()+ the_time.getMonth()+ the_time.getFullYear()); document.getElementsByTagName('head')[0] .appendChild(new_script); '這是我第一次用Javascript創建東西,我不確定是否'var the_time = new Date();'在該上下文中有效。 – Michael

+0

我會嘗試將我的代碼完全複製到你的「(function(){COPY CODE TO HERE))();」碼。然後只需將「test.js」更改爲任何外部js文件被調用。 – Jasper

+0

我試過了,但不起作用。對不起,我是JS和bookmarklets的新手。 (http://en.wikipedia.org/wiki/Bookmarklet)所以任何幫助歡迎。 – Michael

0

只有當該時間戳被調整到一天中的某個時間(例如午夜)時。這不能在HTML中完成,但我發現一些PHP將完成這項工作:from PHP Freaks

0

是的,這應該工作完全符合你的需要,只需注意,你只寫日期部分,沒有時間。

1

如果用PHP中生成的頁面,你可以這樣做:

<script src="http://external.example.com/bookmarklet.js?<?php echo date('Ymd'); ?>" type="text/javascript"></script> 
0

即使每天一次好過,我認爲你需要更新客戶端的緩存每當JavaScript的變化 - 或近似,當您升級或重新啓動應用程序。不知道PHP中的最佳做法是什麼,但是在Python中,我會在應用程序啓動時生成一個隨機數,將其存儲在全局變量中,並在您提供的每個資源URL中使用它,無論是JS還是CSS。只有在有新版本時才需要重新加載像jQuery或YUI等庫,並且您可能想從CDN提供它們。

相關問題