2011-07-05 19 views
15

Internet Explorer không hỗ trợ từ khóa "const". Tôi có thể sử dụng một shim kiểm tra nếu "const" được hỗ trợ và, nếu không, xác định lại nó là var? Tôi đoán nó sẽ được tốt đẹp nếu nó thực thi constancy, có thể sử dụng object.Freeze, nhưng tôi sẽ không sao với một shim đơn giản.Javascript shim để xác định lại "const" là "var" cho Internet Explorer

CẬP NHẬT: Tôi muốn điều này để tôi có thể sử dụng các thư viện Javascript hiện có sử dụng "const" mà không sửa đổi chúng. Rõ ràng, tìm/thay thế sẽ hoạt động, nhưng nó lộn xộn và không thể duy trì được.

+7

Nếu nó không quan trọng đối với mã của bạn cho dù mã định danh là hằng số hay không (vì bạn không ngại đưa ra IE 'var'), tại sao không chỉ tạo tất cả biến số định danh? – lonesomeday

+7

@lonesomeday - cùng một lý do const được phát minh. Nó ghi lại ý định của mã tốt hơn so với var và, khi const có sẵn, nó thực thi mục đích đó. Anh ấy đang cố gắng sử dụng các lợi thế ngôn ngữ khi có sẵn, không chỉ là chương trình cho mẫu số chung thấp nhất. Có nghĩa với tôi. – jfriend00

+0

Đã thêm một số thông tin - lý do chính là tôi muốn có thể sử dụng các thư viện mà người khác đã viết mà không sửa đổi chúng. –

Trả lời

1

Bạn có thể viết shim phía máy chủ, vì vậy khi yêu cầu tệp .js bất kỳ const nào được thay thế bằng var khi tệp được phát trực tuyến tới trình duyệt. (Cần có khả năng phát hiện từ/ngắt khoảng trắng thích hợp)

Vì bạn đang ở trên máy chủ, bạn không thể phát hiện khả năng của trình duyệt và sẽ phải phụ thuộc vào chuỗi User-Agent để thực hiện điều này cho IE, hoặc có javascript chạy trên trình duyệt máy khách nói với máy chủ rằng nó cần mã không phải là const.

Tôi thực hiện điều tương tự với tệp "userprefs.css" thực sự được hỗ trợ bởi một servlet Java, xây dựng và phát tệp cụ thể cho từng người dùng.

+0

Cảm ơn - Tôi hy vọng có một cách để làm điều này phía khách hàng bằng cách sử dụng tính năng phát hiện và xác định const nếu nó không được hỗ trợ. Tuy nhiên, phía máy chủ có thể là lựa chọn duy nhất. –

+0

Xây dựng dựa trên ý tưởng này, nếu bạn đang yêu cầu động trang, thì bạn có thể thực hiện phát hiện tính năng trong javascript và tải tất cả các trang có hậu tố: ví dụ: ? const = false. Sử dụng Express (và có thể các máy chủ khác), bạn có thể dễ dàng kiểm tra tình trạng này và sau đó thực hiện quá trình xử lý của bạn trước khi trở về trang. – Griffork

1

Tôi sẽ sử dụng Modernizer cho việc này và tải tệp tập lệnh thích hợp dựa trên hỗ trợ cho Const. Bạn có thể viết một plugin Grunt JS để tự động xây dựng phiên bản thứ hai cho IE bằng cách thực hiện tìm kiếm tự động và thay thế cho 'const'.

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