2016-08-23 37 views
0

我有我defer加載從CDN,像這樣一些資源:一勞永逸腳本標記錯誤處理程序已經完成如何運行腳本?

<script src="js/sri-fallback.js"></script> 
<script defer 
     src="https://code.jquery.com/jquery-3.1.0.min.js" 
     integrity="sha256-cCueBR6CsyA4/9szpPfrX3s49M9vUU5BgtiJj06wt/s=" 
     data-fallback="js/jquery.min.js" 
     crossorigin="anonymous" onerror="resource_error(this)"></script> 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" 
     defer 
     data-fallback="js/bootstrap.min.js" 
     integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" 
     crossorigin="anonymous" onerror="resource_error(this)"></script> 
<script src="js/do_jquery_stuff.js" defer></script> 

sri-fallback.js是,我試圖用它來自動處理故障從CDN加載時(例如不正確的哈希腳本或者cdn被關閉)。它看起來像這樣:

function resource_error(element) { 
    var fallback_url = element.dataset.fallback; 
    var script = document.createElement('script'); 
    script.src = fallback_url; 
    document.head.appendChild(script); 
} 

這主要工作,但問題是,資源的順序加載:

  1. jQuery的通過CDN(失敗)
  2. 通過CDN引導(失敗)
  3. do_jquery_stuff.js(成功)局部
  4. Jquery的(成功)局部
  5. 自舉(成功)

這意味着do_jquery_stuff.js失敗,因爲它取決於jquery,它在運行時未加載。

如何運行do_jquery_stuff.js只有當所有的腳本已加載?

回答

0

由於您正在處理由您自己的js加載文件失敗,我認爲這裏唯一的解決方案是讓您的do_jquery_stuff.js也動態運行,在您檢查所有已加載腳本後。

我看到的一個解決方案是將每個延遲腳本上的onload事件綁定到sri-fallback.js的新函數。這樣一來,你就可以知道哪些腳本已經成功了,已經失敗了,你也知道,當他們每個人的最終成功。您必須計算需要加載多少個腳本。

一旦你知道每個腳本已成功加載,附加你的do_jquery_stuff.js動態頁面。

相關問題