2013-10-04 68 views
0

我的工作是遷移手動寫入腳本標記一個使用YUI3加載器來管理腳本依賴的應用程序。我正在與如jQuery腳本不應該被加載兩次的問題,因爲在某些情況下,舊代碼下降頁面上的腳本,然後YUI加載後再次加載它。有沒有辦法來防止這種情況發生?看起來加載程序應該能夠在注入新標記之前使用與它要創建的src相同的src查詢腳本標記。有沒有辦法阻止YUI3加載器加載已經在頁面上的腳本?

回答

0

事實證明,這樣做的一種方法是調用Y.add()主動對模塊的名字。這適用於本身沒有用Y.add()定義的模塊(例如jQuery插件)。但是,如果使用Y.add()定義的模塊執行此操作,則存在潛在的競爭條件。例如,請考慮以下順序:

  1. 爲模塊A腳本的運行(調用Y.add(「A」,...))
  2. YUI熄滅運行前加載模塊A的要求回調
  3. Y.add(「A」)與一個空的回調再次調用(通知YUI,對於一個腳本文件是在頁面上)
  4. YUI因爲異步加載還沒有恢復,YUI取空​​回調作爲甲

對FI定義x是使用下面的腳本:

var preloadedModules = ['a', ... ]; // list of module scripts already on the page 
    , noop = function (Y) { }, version = '@[email protected]', i, len, moduleName; 
for (var i = 0, len = preloadedModules.length; i < len; ++i) { 
    moduleName = preloadedModules[i]; 
    if (!YUI.Env.mods[moduleName]) { // avoids overwriting YUI module definitions 
     YUI.add(moduleName, noop, version); 
    } 
} 
0

this video的大約3/4會顯示如何加載非寫入YUI的外部模塊,並通知加載器它已被加載,因此它不會嘗試執行兩次。基本上,你監控裝載機的onProgress事件,火災時,你和你想給模塊則這將使得裝載機標記的名YUI.add()的模塊加載。

相關問題