2012-01-03 24 views
8

tôi sử dụng HTML5 soạn sẵn và jQuery được khai báo hai lần trong trang HTML như thế này:Lý do bao gồm các tập lệnh với hai cuộc gọi khác nhau là gì?

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.6.2.min.js"><\/script>')</script> 

lý do đằng sau bao gồm cả tập tin JavaScript theo cách này là gì?

Có vẻ như lý do duy nhất là tải thư viện jQuery từ máy chủ cục bộ nếu không thể truy cập được từ Google CDN.

+8

Tôi không hoàn toàn chắc chắn những gì bạn đang yêu cầu. Bạn đã đưa ra câu trả lời cho câu hỏi của mình ... – lonesomeday

+0

hoạt động nếu bạn không có kết nối internet –

Trả lời

8

Họ lý ​​do html5 Boilerplate bao gồm tập lệnh theo cách đó là vì nó cố gắng để "tải thư viện jQuery từ máy chủ cục bộ nếu không thể truy cập từ Google CDN." =)

2
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 

này sẽ cố gắng để tải phiên bản giao thức-ít của thư viện jQuery

<script>window.jQuery || document.write('<script src="js/libs/jquery-1.6.2.min.js"><\/script>')</script> 

này sẽ được tải các phiên bản địa phương của thư viện jQuery nếu phiên bản Google lưu trữ là không tải đúng (không thể truy cập, trang web bị ngừng hoạt động, v.v.), do đó kiểm tra window.jQuery. Nếu window.jQuery không phải là true thì nó sẽ thực hiện document.write

1

Có, nó đang kiểm tra xem jQuery có được tải hay không, nếu không, sau đó tải nó từ máy chủ của riêng.

// chỉ được sử dụng để làm cho nó tương thích với cả HTTP và HTTPS.

+0

+1 để làm rõ về '//' Tôi không biết điều đó! – enam

0

Lý do là không hoàn lại. Dòng đầu tiên của mã

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 

Kéo thư viện jQuery từ CDN của Google như bạn đã nói. Sau đó dòng tiếp theo này:

<script>window.jQuery || document.write('<script src="js/libs/jquery-1.6.2.min.js"><\/script>')</script> 

Sẽ xác minh rằng thư viện jQuery đã được tải (từ CDN của Google), nếu không, sau đó lấy một bản sao cục bộ của jQuery.

2

Tải jQuery từ CDN của Google có thể nhanh hơn nhiều so với tải từ máy chủ cục bộ của bạn và nó có thể được lưu vào bộ nhớ cache để người dùng có thể đã có bản sao được lưu trong bộ nhớ cache từ một trang web khác.

Kiểm tra đảm bảo rằng nó đã được tải, nếu không, nó sẽ không thành công, tải nó từ máy chủ cục bộ.

0

Nếu câu hỏi của bạn là "tại sao giao thức chuyển không được chỉ định?", thì câu trả lời là "nó không phải được chỉ định". Điều này cho phép bạn sử dụng cùng một tham chiếu tập lệnh bất kể kết nối có sử dụng ổ cắm an toàn hay không mà không cần người dùng của bạn nhận cảnh báo về nội dung được mã hóa/không được mã hóa.

Nếu câu hỏi là "dòng này đang làm gì ?: window.jQuery || document.write ('</script>')", thì câu trả lời là chúng tôi đang sử dụng (nhiều hơn hoặc ít hơn) câu lệnh ternary để kiểm tra đối tượng jQuery, sẽ đánh giá một giá trị "false" nếu thư viện jQuery không được nạp, và nếu như vậy, kiểm tra này sẽ kích hoạt nửa thứ hai của câu lệnh, dẫn đến jQuery đang được nạp.

HTH.

Các vấn đề liên quan