2011-10-27 30 views

Trả lời

7

Câu trả lời là ở đây: Decoding jQuery,

Jim Driscoll phát hiện ra rằng để biết thêm tiêu chuẩn tôn trọng các trình duyệt, bạn có thể sử dụng eval.call (cửa sổ, dữ liệu), nhưng đối với Chrome và IE, mọi thứ có một chút khác biệt.

Internet Explorer: Dường như IE sử dụng window.execScript (dữ liệu)

Chrome: eval.call (cửa sổ, dữ liệu) phá vỡ trên Chrome, nhưng cửa sổ [ "eval" ] .call (cửa sổ, dữ liệu) hoạt động trên Chrome và cũng như các trình duyệt khác không phải là trình duyệt IE , đây là cách các giải pháp trên dựa trên.

+1

Hmm, 'eval.call' hoạt động tốt trong Chrome 14 ít nhất. –

+1

Tôi không viết lý do chỉ tìm thấy lời giải thích .... Có thể Chrome 14 chỉ đạt tiêu chuẩn so với các phiên bản cũ hơn và vì jquery hướng đến việc vượt qua trình duyệt chứ không chỉ trình duyệt hiện tại mà họ giữ nó. – scrappedcola

+0

Vâng, đó là những gì tôi nghĩ quá. Tôi chỉ cần lưu ý rằng nó hoạt động trong Chrome 14. jQuery sẽ phải giữ nó trong miễn là các trình duyệt mà nó không hoạt động xung quanh (sẽ mãi mãi!) –

3

Sau khi xem source, tôi đã tìm thấy this link. Có một cái nhìn tại các văn bản nhấn mạnh:

Đáng buồn thay, eval.call(window,src) phá vỡ trên Chrome - nó than phiền về bối cảnh không phù hợp. Rất tiếc - và tôi không thể Google giải thích tại sao số điện thoại này có thể là như vậy. Nhưng một vài may mắn đoán sau đó, và tôi phát hiện ra rằng window.eval.call (cửa sổ, src) hoạt động trên tất cả các trình duyệt không phải IE. Bây giờ, khi tôi nói "var j = 1", cửa sổ [j] là biến được đặt ... Vì vậy, thì tốt. Tại sao chúng ta phải thêm cửa sổ phụ. trên Chrome? Không phải số chắc chắn - tôi có thể đoán, nhưng có thể là sai.

Vì vậy, window.eval được sử dụng để nhận globalEval hoạt động trong Chrome.

+0

Dường như nó hoạt động tốt trong Chrome 14. Nhưng bài viết đó là từ năm 2009, vì vậy tôi sẽ không ngạc nhiên nếu đó là lỗi của Chrome hiện đã được khắc phục. –

+0

@JamesAllardice Vẫn là những người dùng không sử dụng phiên bản Chrome mới nhất. jQuery được thiết kế để hỗ trợ nhiều trình duyệt nhất có thể. –

+0

Vâng, tôi biết. Tôi đã lưu ý rằng nó hiện đang hoạt động trong Chrome. Tất nhiên, jQuery sẽ phải giữ bản sửa lỗi cũ của Chrome trong đó miễn là Chrome cũ xung quanh. –

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