我加載jQuery的這樣:爲什麼jQuery仍然未定義但腳本標記被加載的可能性很小?
function require(url, cb = new Function) {
var s = document.createElement('script');
s.src = url;
// s.async=true;
// ^^^^^^^^^^^^ This is already removed, but the problem still existed.
s.onload = cb;
document.head.appendChild(s);
}
require(jquery_cdn_url, function(){
try {
alert($);
} catch (e) {
ga('send', 'pageview', e);
}
});
在catch
塊中的錯誤是不會發生所有的時間。但是對於一些訪問者(很小的機會),因爲我通過將信息發送給Google Analytics來追蹤這些信息。
在此問題的以前版本中,腳本具有async
屬性。但是在真實的項目中,我刪除了它,並且錯誤仍然出現。
這是爲什麼發生?有什麼辦法可以避免這種情況?
一些進一步的想法:
- 的谷歌分析代碼也被加載這種方式,因此,如果
onload
功能不適用於某些用戶代理工作,ga()
也應該送什麼給谷歌。 - 我想一種避免這種情況的方法:在
try ... catch
區塊中,使用類似「xxx.html?load = sync」的查詢重新加載失敗的案例。然後我在服務器端進行一些檢測,如果有load=sync
查詢,那麼我會輸出帶有同步JavaScript標籤的代碼。這聽起來像是一種可能的解決方法,但並不完美,因爲它需要另一次重新加載(更多浪費的網絡請求)和一些服務器端編程工作量。
你確定jQuery被加載? –
如果'onload'回調被觸發,我認爲這意味着它被加載。 –
你確定這個網址是否正確?你有沒有在「網絡」選項卡中確認外部jQuery實際上正在加載? –