Nếu bạn đang đọc bài đăng này vào năm 2020, có lẽ bạn đã quen với những Lời hứa hơn. Cách tiếp cận hiện đại hơn sẽ được ưu tiên nếu tất cả các trình duyệt mục tiêu của bạn hỗ trợ ES6 hoặc bạn đang sử dụng polyfill.
Giải pháp này hoạt động giống như câu trả lời @JaykeshPatel , nhưng nó dựa trên Promise
s:
function loadScript(scriptUrl) {
const script = document.createElement('script');
script.src = scriptUrl;
document.body.appendChild(script);
return new Promise((res, rej) => {
script.onload = function() {
res();
}
script.onerror = function () {
rej();
}
});
}
loadScript('http://your-cdn/jquery.js')
.then(() => {
console.log('Script loaded!');
})
.catch(() => {
console.error('Script loading failed! Handle this error');
});
Bạn có thể chuyển một số biến theo ngữ cảnh trong các đối số của lệnh res
gọi lại hoặc nếu thư viện của bạn đã nhập một số ký hiệu chung, bạn có thể tham chiếu nó ở đó.
Ví dụ: vì jQuery giới thiệu $
biểu tượng toàn cục, bạn có thể gọi res($)
và tạo phạm vi cục bộ cho nó (hoàn hảo nếu bạn đang sử dụng TypeScript và bạn không muốn khai báo một biến mô-đun trong mỗi tệp, theo cách này bạn có thể viết const $ = await loadScript(..)
).
Nếu bạn không muốn chuyển bất kỳ đối số nào, bạn chỉ có thể rút ngắn mã của mình như sau:
script.onload = res;
script.onerror = rej;
onload
ổn cho IE phiên bản 9 trở lên - vì vậy chỉ cần cài đặtonload
có lẽ là ổn đối với hầu hết mọi người hiện tại