2011-03-12 74 views

回答

8

下面是創建一個新的腳本元素的功能。它附加一個遞增的整數,以使腳本的URL唯一(如Kon建議的)以強制下載。

 
var index = 0; 
function refreshScript (src) { 
    var scriptElement = document.createElement('script'); 
    scriptElement.type = 'text/javascript'; 
    scriptElement.src = src + '?' + index++; 
    document.getElementsByTagName('head')[0].appendChild(scriptElement); 
} 

然後在Firebug的控制檯,您可以稱呼其爲:

 
refreshScript('my_script.js'); 

你需要確保該指數本身並不是劇本正在被重新裝入的部分!

Firebug Net面板將幫助您查看腳本是否正在下載。響應狀態應該是「200 OK」而不是「304 Not Modified」,並且您應該在查詢字符串中看到索引

Firebug HTML面板將幫助您查看script元素是否被添加到頭部元素

更新:

下面是使用時間戳,而不是一個索引變量的版本@davyM表明,它是一個更靈活的方法:

 
function refreshScript (src) { 
    var scriptElement = document.createElement('script'); 
    scriptElement.type = 'text/javascript'; 
    scriptElement.src = src + '?' + (new Date).getTime(); 
    document.getElementsByTagName('head')[0].appendChild(scriptElement); 
} 

阿列克謝的點也非常-stated。

+0

我會使用時間(新日期()。getTime())而不是索引(刪除全局變量的需要)。如果你刷新相同的腳本,你甚至可以創建一個書籤。 – 2011-03-12 21:17:37

+0

@davyM,好主意。我會更新。 – inkfist 2011-03-12 21:24:55

+0

+1。請注意,重新加載腳本不會更新已加載的evry對象。您可能遇到使用舊版本功能(即回調/關閉/存在對象)的有趣問題。 – 2011-03-12 22:01:33

0

如果您正在討論您的.js文件的客戶端/瀏覽器緩存的不幸情況,那麼您可以簡單地版本化.js文件。可以:

  • 重命名js文件本身(不是優選的)
  • 更新包括線引用yourfile.js 1,yourfile.js 2等。因此強制瀏覽器來請求?服務器的最新版本。 (首選)
+0

不,它不是緩存問題。我想刷新.js *而不刷新整個頁面。有點像你如何通過Firebug快速編輯CSS,而不必每次都刷新頁面來測試結果。不完全是這樣,因爲我確實想將更改保存在.js文件中 - 但重點是我不想刷新整個頁面。 – Susan 2011-03-12 19:54:49

+0

除了標準的調試實踐(例如評估表達式,檢查值等)外)我不知道你如何做你想做的事。不幸的是,重新加載整個頁面是最好的選擇。 – Kon 2011-03-12 20:22:16

0

不幸的是,您必須刷新網頁才能看到對JavaScript進行的編輯。我不知道如何實時編輯JavaScript,並且無需刷新即可看到這些編輯效果。

您可以使用Firebug插入新的 JavaScript,並對DOM對象進行實時更改;但是你不能編輯已經運行的JavaScript。

+0

我知道你可以通過Firebug編輯css和html,但我沒有看到.js文件是如何編輯的? – Susan 2011-03-12 20:02:45

+0

點擊「控制檯」並將你的js代碼粘貼在右側面板上。 – 2011-03-12 20:07:31

+0

@Susan對不起,這是一個糟糕的詞選擇;我的意思是你可以使用Console選項卡編寫你的JS,並且能夠實時顯示你的變化。我編輯我的答案是更具體。 – Moses 2011-03-12 20:08:19

相關問題