どうやってwindowのロードイベントが触発されたか分かりますか?
2631 ワード
背景
ページの読み込みを速くするために、重要ではない第三者のスクリプトをページの読み込みが完了した後に怠惰にロードします.
HTML 属性が
HTML DOM readyState Property What is the non-jQuery equivalent of'(document).ready()'? Performanctiming.loadEventEnd Window:ロードイベント
著作権声明
このブログのすべてのオリジナル文章は著作権を保持しています.転載は、本明細書の完全性を維持し、著者後除と本明細書の元の住所をハイパーリンク形式で明記しなければならない.
ページの読み込みを速くするために、重要ではない第三者のスクリプトをページの読み込みが完了した後に怠惰にロードします.
//
window.addEventListener('load', () => {
//
loadScript({
url: 'https://www.domain.com/test.js',
timeout: 10000
}).then(() => {
console.log('ok');
}).catch(console.error);
//
// ...
});
load
イベントは一回だけトリガされるので、怠惰ローディング(load
)のシナリオに怠惰ローディングのスクリプトがあると、埋め込まれたスクリプトがトリガできなくなります.//
window.addEventListener('load', () => {
window.addEventListener('load', () => {
//
console.log(' ');
});
});
ソリューションHTML
document.readyState
属性は、現在のページのロード状態を反映することができる.uninitialized
-Has not started loading yet loading
-Is loading loaded
-Has been loaded interactive
-Has loaded enough and the user can interact with it complete
-Flyloaded complete
である場合、現在のページは既にロードされていると考えられます./**
*
* @param timeout {Number} / :
* @return {Promise} document is loaded?
*/
function windowLoaded(timeout = 90) {
let loaded, loadFail;
const status = new Promise((resolve, reject) => {
loaded = resolve;
loadFail = reject;
});
if (document.readyState === 'complete') {
loaded('complete');
} else {
window.addEventListener('load', () => loaded('load'));
}
// timeout
setTimeout(() => loadFail('timeout'), timeout * 1000);
return status;
}
// load
windowLoaded()
.then(res => {
console.log(res);
})
.catch(console.error);
参照HTML DOM readyState Property What is the non-jQuery equivalent of'(document).ready()'? Performanctiming.loadEventEnd Window:ロードイベント
著作権声明
このブログのすべてのオリジナル文章は著作権を保持しています.転載は、本明細書の完全性を維持し、著者後除と本明細書の元の住所をハイパーリンク形式で明記しなければならない.