2010-02-09 57 views
2

我想動態地替換腳本的源url以加速dev階段,所以沒有實際的生產用法。這種替換適用於CSS或圖像。但是很難讓它與javascript src一起工作。該腳本似乎沒有執行,雖然通過src加載。使用jquery替換腳本src沒有執行

這是我所做的。

.................. 
    return this.each(function() { 
    $(this).click(function() { 
    var t = $(this); 
    options.newVal = t.val(); 
    var absUrl = '/root_path_still_within_the_same_domain/'; 
    //options.oldVal is just to limit the replacement scope 
    var oldJsUrl = absUrl + options.oldVal + '.js'; 
    var newJsUrl = absUrl + options.newVal + '.js'; 

    var reJsUrl = $('script[type*=javascript][src*=' + options.oldVal + ']' || 'script[type*=javascript][src*=' + options.newVal + ']'); 

     if (oldJsUrl.length && options.oldVal.length) { 
      reJsUrl.attr('src', newJsUrl); 
     } 

     options.oldVal = options.newVal; 

    }); 
    }); 

...................... 

在Firebug中,目標老src網址(/old_path_to_file.js)被替換爲新的(/new_path_to_file.js)。所以更換工作。但它報告,(看到真正的絕對URL的http://,如果相關):

無法加載來源:http://localhost/........js

所以腳本SRC被替換,但不執行。任何我錯過的東西,如果這東西是允許的呢?我也嘗試過使用$ .getScript(absUrl + options.newVal +'.js');但是這並不是取代舊的src,只是向dom添加了更多的js,這不是我想要的。這部分的任何暗示呢?

感謝您的所有幫助。

回答

0

你想「替換」舊的腳本嗎?也就是說,用script標籤加載的javascript不再在內存中,而新的JavaScript是?你不能這樣做。您必須取消原始腳本執行的定義和取消附加事件。

+0

那麼,我應該採取什麼樣的路線?也許$ .getScript替換?你能否提供一些例子來說明如何取消定義和取消附加事件?謝謝 – swan 2010-02-09 03:31:04

+0

嗯......好吧,我想我必須看看原始腳本的樣子。 – Hogan 2010-02-09 04:03:32

+0

每個處理相同事物的腳本都是不同的: one.js:$('。rounded')。corner(「8px」);兩個.js:$('。rounded')。corner(「6px」);等更復雜的相關內容。我試圖避免將它們合併成一個具有條件的腳本,因爲它們需要在開發完成時單獨生活。 – swan 2010-02-09 04:16:10

2

如果你只是想包括其他腳本:

var script = document.createElement("script"); 
script.src = url; //Specify url here 
script.type = "text/javascript"; 
$("body").append(script); 

這將添加一個腳本並執行它...你不能更換src,並讓它運行出於安全原因。你也不能只是「撤銷」原始腳本所做的任何事情......根據你的問題,我不認爲這是一個問題,但如果是這樣,也許你不應該包括最初的腳本標記,決定你需要什麼,動態創建像上面顯示的腳本元素。

+0

這就像getScript一樣,在dom中添加更多的js,而不是內聯。 「撤消」的需要實際上是因爲其他腳本以不同方式處理相同的事情。所以舊的記憶必須刪除。但是,我可以使用script.remove()來「撤銷」以前加載的腳本嗎?這條路? – swan 2010-02-09 04:06:02

+0

@kuswantin - 這會刪除腳本元素,但不會撤消腳本所做的任何操作。 – 2010-02-09 04:10:27

+0

我明白了。這解釋了它。謝謝Nick。 – swan 2010-02-09 04:48:13