Mặc dù tôi gần như chắc chắn câu trả lời cho câu hỏi này sẽ là trình duyệt cụ thể, có bất kỳ trình duyệt nào xác định hành vi khi nhiều thẻ <script> được sử dụng và có cùng thuộc tính src không?Điều gì xảy ra nếu bạn sử dụng thẻ <script> với cùng thuộc tính "src" nhiều lần trong một tài liệu HTML?
Ví dụ ...
<script src="../js/foo.js"></script>
...
<!-- what happens here? -->
<script src="../js/foo.js"></script>
Lý do tôi hỏi câu hỏi này ở nơi đầu tiên, đó là trong trường hợp đặc biệt của tôi, tôi đang sử dụng quang cảnh một phần trong một ứng dụng ASP.NET MVC mà tận dụng JQuery . Tất cả các tệp JQuery JS đều được bao gồm trong tệp mẫu chính thông qua các thẻ tập lệnh. Tôi muốn thêm các thẻ script vào các tệp xem một phần để trong trường hợp chúng được sử dụng bên ngoài ngữ cảnh của khuôn mẫu chủ, chúng sẽ tự động bao gồm tất cả các tệp JS cần thiết và không dựa vào một khung nhìn hoặc khuôn mẫu khác để bao gồm chúng. Tuy nhiên, tôi chắc chắn không muốn làm cho các tệp JS phải được chuyển đến máy khách nhiều lần, hoặc bất kỳ tác dụng phụ nào khác có thể tác động tiêu cực đến trải nghiệm người dùng.
Suy nghĩ của tôi bây giờ là, nếu không phải tất cả, các trình duyệt chính (FF, Safari, IE, Opera) sẽ lưu một tệp JS vào lần đầu tiên được sử dụng, sau đó trên các thẻ script tiếp theo, trình duyệt sẽ sử dụng bản sao được lưu trong bộ nhớ cache nếu có và nếu nó chưa hết hạn. Tuy nhiên, hành vi bộ nhớ đệm thường có thể được thay đổi thông qua cấu hình trình duyệt, vì vậy nó không có vẻ quá "an toàn" để dựa vào bất kỳ loại hành vi bộ nhớ đệm nào.
Tôi có phải chấp nhận thực tế rằng các lượt xem một phần của tôi sẽ phụ thuộc vào các mẫu hoặc chế độ xem khác bao gồm các tệp JS thích hợp không?
+1 một số thư viện được bảo vệ chống lại sự bao gồm hai lần, nhưng theo như tôi thấy jQuery thì không.Đừng bao gồm nó hai lần. Bạn có thể nhận được các hành vi bất thường khi thư viện được instanced hai lần. – bobince
Mã được thực hiện khi nó được gọi. Bạn có nghĩa là để nói nó sẽ được giải thích hai lần, đó là khá khác nhau, và điều đó tạo ra các vấn đề khác với bạn minh họa. –
@austin mã sẽ được diễn giải và thực hiện khi nó được tải, giống hệt với JS. Ví dụ, 'function foo() {}' là một dòng mã, khi được thực thi, tạo một biến toàn cục mới có tên là foo và gán giá trị của một thân hàm cho nó. JW đang nói đây là vấn đề vì nó sẽ được thực hiện hai lần. –