2011-12-01 83 views
4

我有一個關於重新加載JavaScript文件的問題。我開發Web頁面的前端,並在JS中進行大量編碼。每當我想檢查應用程序的流程是否正確(或者做一些調試)時,我必須按F5鍵才能重新加載整個頁面,並且它是腳本,我必須等待。等待時間取決於頁面的重量,有時候我不耐煩。因此,我想知道是否有任何方法重新加載只更改腳本文件* .js?或者可能是Chrome的某個插件重新加載所選腳本?這可能是緩解發展的一種非常方便的方式。謝謝你的回覆。如何重新加載JavaScript文件

這一個用了jQuery,在這裏例如:

var scs=$('script[type*=javascript]'); 
var scsl = scs.length; 
var scsi = 0; 
var o = []; 
var oi = 0; 
var ol = 0; 
var s = ''; 
var fws = 0; 
var sws = 0; 
var v = {}; 

function i1(){ 
fws = window.setInterval(function(){ 
        v = $(scs[scsi]); 
         
        s = v.attr('src'); 
        if(typeof s!='undefined' && s.indexOf('http')==-1 && s.indexOf('index')==-1){ 
                console.log([scsl,scsi,s]); 
                o.push({src:s}); 
                v.remove(); 
        } 

        if(scsi==scsl){ 
                console.log(o); 
                window.clearInterval(fws); 
                ol = o.length; 
i2(); 
        } 
        else{ 
                scsi++; 
        } 
},800); 
} 

function i2(){ 
                sws=window.setInterval(function(){ 
                        v = o[oi]; 
                        sc = $('<script>').attr({type:'text/javascript',src:v.src+'?t='+(new Date().getTime())}); 
                        console.log([ol,oi,v.src]); 
                        $('head').append(sc); 

                        if(oi==ol-1){ 
                                window.clearInterval(sws); 
                        } 
                        else{ 
                                oi++; 
                        } 
                },800); 

} 
i1(); 
+1

如果可能的話,加速您的js開發的一種方法是使用在線工具,如jsfiddle或jsbin。然後,您不必重新加載整個頁面,只需單獨處理腳本,然後將其實施到您的站點。 – Paparappa

回答

4

據我所知,有沒有辦法做到這一點。問題是,一旦評估完畢,您就無法從頁面中卸載10腳本。

即使你刪除<script>節點,它不會改變的行爲。例如,有些第三方插件可能是可行的,但我幾乎可以肯定,在任何vanilla js實現中都不可能。

當然,你可以只從服務器上加載相同的腳本文件並執行(EVAL),但再一次,你還是沒有卸載以前的代碼可能導致非常不可預料的行爲。

所以,你必須保持你的F5鍵在其腳趾。

+0

謝謝你的回覆,這是你的正確。我和同事聊了聊,他立刻寫了一個簡單的函數,它刪除所有

0

您可以嘗試在Firefox中新便籤功能(我覺得既然7.0它已經在版本)。

當我在一個新的一段JavaScript我做暫存器,然後出複製到我的編輯時,我喜歡它轉速硬盤。基本上,我可以在功能和對象上做所有我可以在飛行中重新定義的工作(不是每個人?)。這樣我可以重新運行函數定義或重新分配對象方法/數據,並且比等待刷新週期快得多。

0

在道場或CommonJS基礎框架它不是在所有問題。 Javascript代碼通常保存在一個模塊中。

在我們的基於Web的IDE我們重裝所有的腳本是這樣的(@reloadCustomMobileStack)時間:

define([ 
    'dojo/_base/declare', 
    'require' 
], function(declare,require) 
{ 
    return dojo.declare("xappstudio.manager.DynamicScriptMixin", null, 
    { 
     _reloadModule:function(module,reload) 
     { 
      require.undef(module); 
      var scripts = document.getElementsByTagName('script'); 
      for (var i = scripts.length - 1; i >= 0; i--) 
      { 
       var script = scripts[i]; 
       if (script.getAttribute('src') && script.getAttribute('src').length > 0 && script.getAttribute('src').indexOf(module)!=-1) 
       { 
        script.parentNode.removeChild(script); 
        break; 
       } 
      } 

      if(reload) 
      { 
       require([module], function(_moduleIn) 
       { 
        console.error('got module' + _moduleIn); 
       }); 
      } 
     }, 
     reloadCustomMobileStack:function() 
     { 
      var modulesToReload = [ 
       'cxapp/delegates/BootDelegate', 
       'cxapp/delegates/FormDelegate', 
       'cxapp/delegates/HeaderToolbarDelegate', 
       'cxapp/delegates/ImageResizeDelegate', 
       'cxapp/delegates/ServiceDelegate', 
       'cxapp/delegates/UrlDelegate', 
       'cxapp/manager/Context', 
       'cxapp/manager/CustomApplication', 
       'cxapp/manager/DataManager', 
       'cxapp/types/Types', 
       'cxapp/utils/RPCProxyPOSTEnvelope' 
      ]; 

      for(var i = 0 ; i < modulesToReload.length ; i++) 
      { 
       this._reloadModule(modulesToReload[i],true); 
      } 

     } 
    }); 
}); 

爲了使用 「require.undef(模塊);」 ,您需要將此處添加到您的Dojo配置中:「has:{'dojo-undef-api':true}」

當然,這不適用於任何Javascript,因爲Dojo/Common-JS Javascript不同但是也使你能夠進行一種依賴注入或解析。