2012-04-11 22 views
7

Tôi đã triển khai StackExchange MiniProfiler trên trang ASP.NET WebForms đã tham chiếu v1.7.1 của jQuery. Các tập tin jQuery được lưu trữ tại địa phương, vì vậy masterfile của tôi trông như thế này:Tại sao MiniProfiler tải jquery-1.7.1 mặc dù tôi đã tải nó trên trang?

<script src="Scripts/jquery-1.7.1.min.js" type="text/javascript"></script> 
<%= MiniProfiler.RenderIncludes() %> 

Tuy nhiên, khi tôi xem nguồn gốc của sản lượng được tạo ra, tôi nhận được một cái gì đó tương tự như sau

<script src="Scripts/jquery-1.7.1.min.js" type="text/javascript"></script> 
<script type="text/javascript">  
    ... 
    load('/app/mini-profiler-resources/jquery.1.7.1.js?v=tNlJPuyuHLy/d5LQjyDuRbWKa0weCpmO3xkO6MH4TtA=', initMp); 
</script> 

Nhìn trong dev tab mạng của công cụ, tôi có thể thấy rằng nó đưa hai yêu cầu vào, một cho Scripts/jquery-1.7.1.min.js và một yêu cầu khác cho /app/mini-profiler-resources/jquery.1.7.1.js

Đây có phải là vấn đề về dự phòng lớn không? Làm thế nào để dừng MiniProfiler bao gồm từ yêu cầu, tải xuống và phân tích cú pháp một bản sao khác của thư viện jQuery?

Trả lời

10

Lý do là chúng tôi đang tải jQuery trong noConflict. Điều này giúp loại bỏ nguy cơ có các phiên bản jQuery xung đột. Ví dụ, chúng tôi không chắc chắn MiniProfiler sẽ vẫn làm việc nếu jQuery phiên bản 1.0 là trên trang. Để tránh rủi ro, chúng tôi tải phiên bản của riêng mình.

Bây giờ, tôi mở một yêu cầu kéo kiểm tra phiên bản trên jQuery trước khi yêu cầu, nếu phiên bản "đúng" ở đó, chúng tôi có thể chỉ đơn giản là bí danh jQueryMP đến jQuery. Tuy nhiên, điều này làm phức tạp mã và chỉ giải quyết vấn đề cho một phiên bản duy nhất của jQuery.

+2

Cảm ơn bạn đã giải thích. Nó có đáng giá bao gồm một đối số 'bool = true' mặc định cho phương thức' RenderIncludes() 'để chọn tải jQuery không? Người dùng sau đó biết rằng họ đang tải phiên bản chính xác ở nơi khác trên trang, sau đó có thể gọi 'RenderIncludes (false)'. Hạnh phúc khi làm việc này nếu bạn nghĩ rằng đây là một cách tiếp cận khả thi. – growse

+3

tiền phạt cho một bản vá, có lẽ RenderIncludes (useExistingjQuery: true) - điều này lần lượt có thể tạo ra 'jQueryMP = jQuery;' thay vì tải nó –

+1

Trong phiên bản mới nhất, hãy làm điều này: StackExchange.Profiling.MiniProfiler.Settings.UseExistingjQuery = true; – pbz

0

vì chúng có url khác nhau, đó là các tài nguyên khác nhau cho trình duyệt. Có thể bạn không cần script đầu tiên mà bạn đã thêm vào.

hoặc thử hack này:

<script src="/app/mini-profiler-resources/jquery.1.7.1.js?v=tNlJPuyuHLy/d5LQjyDuRbWKa0weCpmO3xkO6MH4TtA="></script> 
+0

Tôi không hỏi tại sao trình duyệt tải cả hai tập lệnh, tôi hỏi lý do mã được tạo tự động từ MiniProfiler đang quyết định tải tập lệnh đã được tải và cách tôi có thể tắt. – growse

+0

đọc câu thứ hai của tôi: xóa: Gavriel

+1

Và sau đó các tập lệnh dựa vào jQuery sẽ không thực thi nếu MiniProfiler isn không kết xuất? – growse

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