Tôi đang phát triển tiện ích con javascript phụ thuộc vào jQuery. Tiện ích có thể hoặc không được tải lên trang đã tải jQuery. Có nhiều vấn đề nảy sinh trong trường hợp này ...Cách nhúng tiện ích Javascript phụ thuộc vào jQuery vào một môi trường không xác định
Nếu trang web không có jQuery, tôi phải tải jQuery của riêng mình. Có vẻ là một vấn đề thời gian tinh tế khi làm điều này, tuy nhiên. Ví dụ: nếu tiện ích của tôi tải và thực thi trước khi jQuery tải xong và thực thi, tôi nhận được lỗi
jQuery is not defined
.Nếu trang web có jQuery, tôi thường có thể làm việc với nó. Nếu phiên bản jQuery cũ, tuy nhiên, tôi muốn tải của riêng tôi. Tuy nhiên, nếu tôi tự nạp, tôi cần thực hiện nó theo cách không bị dẫm lên biến số
$
của chúng. Nếu tôi đặtjQuery.noConflict()
và bất kỳ tập lệnh nào của chúng đều phụ thuộc vào$
thì tôi vừa mới phá vỡ trang của chúng.Nếu trang web sử dụng một thư viện javascript khác (ví dụ: nguyên mẫu), tôi cũng cần phải nhạy cảm với biến số
$
của mẫu thử nghiệm.
Vì tất cả những điều trên, dường như không phụ thuộc vào jQuery. Nhưng trước khi tôi đi xuống con đường đó, mà sẽ liên quan đến chủ yếu là viết lại mã widget của tôi, tôi muốn hỏi lời khuyên trước.
Bộ xương cơ bản của mã của tôi, trong đó có lỗi thời gian và đôi khi $
lỗi, sau:
<script type="text/javascript" charset="utf-8">
// <![CDATA
if (typeof jQuery === 'undefined') {
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = '{{ URL }}/jquery.js';
head.appendChild(script);
}
// ]]>
</script>
<script type="text/javascript" src="{{ URL }}/widget.js"></script>
phụ tùng của tôi có cấu trúc sau:
(function($) {
var mywidget = {
init: function() {
...
}
};
$(document).ready(function() {
mywidget.init();
});
})(jQuery);
Nếu có bất kỳ con trỏ hoặc các nguồn lực để đạt được một widget có thể làm việc trong tất cả các môi trường được đề cập, chúng sẽ được đánh giá cao.
câu trả lời chất lượng sách văn bản! – bjornl
Không nhận được nhiều hơn thế, ước gì tôi có thể cho điểm nhiều hơn! –
rất đẹp, cảm ơn nhiều. – TimDog