2009-12-18 29 views
9

Chủ đề này trở thành một cuộc thảo luận nóng tại văn phòng, vì vậy tôi quan tâm để tìm hiểu những gì bạn nghĩ.Những rủi ro cụ thể của việc sử dụng các thuộc tính HTML tùy chỉnh là gì?

Chúng tôi đang làm việc trên một ứng dụng web chỉ nhắm mục tiêu một số trình duyệt cụ thể. Các trình duyệt này hiện bao gồm các hương vị khác nhau Opera 9 và Mozilla 1.7.12. Trong tương lai, chúng tôi cũng có thể phải hỗ trợ Opera 10 và các hương vị khác nhau của WebKit. Nhưng rất khó chúng tôi sẽ phải đối phó với bất kỳ phiên bản nào của IE.

Ứng dụng web của chúng tôi tuyên bố nghiêm ngặt HTML 4.0 trong tài liệu của nó.

Gần đây, tôi đã đề xuất giải pháp cho một vấn đề cụ thể để sử dụng các thuộc tính tùy chỉnh trong HTML. Tôi đã đề xuất một cái gì đó sẽ trông như thế này:

<span translationkey="someKey">...</span> 

Vì đây không phải là HTML hợp lệ, nó đã không đi xuống tốt với những người HTML của chúng tôi, và chúng tôi đã tham gia vào một cuộc tranh luận.

Câu hỏi của tôi là: Điều gì - nếu có - có phải là rủi ro khi sử dụng các thuộc tính tùy chỉnh không? Tôi biết trang sẽ không xác nhận, nhưng không phải tất cả các trình duyệt chỉ bỏ qua các thuộc tính mà họ không biết? Hoặc có thể hiểu rằng một số trình duyệt sẽ thay đổi thành "chế độ quirks" và hiển thị trang như thể nó là cái gì đó khác với HTML 4.0 nghiêm ngặt?

Cập nhật:

Đã đặt câu hỏi thực tế.

Trả lời

13

Không có giới hạn/rủi ro trong trình duyệt. Chỉ có trình xác nhận hợp lệ w3 mới sủa, nhưng chó sủa không cắn.

Các w3 spec nói như sau:

  • Nếu một user agent gặp một thuộc tính nó không nhận ra, nó nên bỏ qua toàn bộ thuộc tính đặc điểm kỹ thuật (ví dụ, các thuộc tính và giá trị của nó).

IE cũng sẽ không render trong chế độ quirks hoặc lâu hơn như một số người nghĩ. Nó sẽ chỉ làm điều đó trên các loại tài liệu không hợp lệ/bắt buộc, không phải trên các thuộc tính không hợp lệ.

Tuy nhiên, hãy nhớ rằng một số thư viện/khung Javascript sẽ "vô hình" thêm/sử dụng các thuộc tính HTML tùy chỉnh trong cây DOM, chẳng hạn như một số plugin jQuery. Bằng cách này bạn có thể có nguy cơ va chạm trong thuộc tính bởi vì nó "do trùng hợp ngẫu nhiên" sử dụng một thuộc tính có cùng tên như bạn làm cho mục đích của riêng bạn. Đáng buồn thay, điều này thường kém hoặc thậm chí không được ghi chép.

+0

Tôi chấp nhận câu trả lời này bởi vì nó giải quyết các câu hỏi tôi đặt ra. Một số loại nguồn có thẩm quyền sẽ được tốt đẹp, mặc dù. – KaptajnKold

+0

Tôi đã thêm một trích dẫn từ w3. – BalusC

+0

+1 cảm ơn nguồn w3 và báo giá cụ thể :) –

10

HTML 5 cho phép các thuộc tính tùy chỉnh sử dụng một tiền tố 'đĩa dữ liệu', xem http://ejohn.org/blog/html-5-data-attributes/

+0

Tôi biết. Tuy nhiên, các trình duyệt chúng tôi cần hỗ trợ hỗ trợ HTML 5. – KaptajnKold

+0

Sau đó, tại sao bạn không chỉ giới thiệu thuộc tính 'data-translationkey =" someKey "'? – Boldewyn

9

Nếu nó một mục tiêu để duy trì html4.0 hợp lệ nghiêm ngặt, sau đó nó không quan trọng tại sao bạn muốn đưa vào các thuộc tính tùy chỉnh, bạn đang phá vỡ mục tiêu.

Tôi nghĩ câu hỏi bạn cần hỏi, là lý do tại sao bạn cần phải phá vỡ 4,0 để có được chức năng bạn muốn: Bất kỳ thứ gì bạn có thể sử dụng thuộc tính tùy chỉnh cho bạn, bạn có thể sử dụng thuộc tính hiện tại:

<span translationkey="someKey">...</span> 

có thể là:

<span class="[email protected]">...</span> 

nó sẽ có một số chu kỳ phụ để phân tích tất cả các thông tin lớp, nhưng miễn là bạn không đặt bất kỳ thông tin css vào lớp đó, nó không thay đổi hiển thị, không đưa bạn vào chế độ quirks, và không giúp bạn trong chiến đấu tại nơi làm việc.

+1

Quan điểm của tôi là nó không phải là một mục tiêu trong chính nó để làm theo các tiêu chuẩn. Chúng tôi đang sử dụng html4.0 nghiêm ngặt bởi vì chúng tôi muốn đảm bảo một hành vi trình duyệt specifik. Vì vậy, câu hỏi của tôi là thực sự: Tôi có gây nguy hiểm cho mục tiêu này bằng cách sử dụng các thuộc tính tùy chỉnh không? – KaptajnKold

+0

câu trả lời tuyệt vời, MEL – Hardryv

+1

Để trả lời câu hỏi của bạn: Thuộc tính tùy chỉnh giúp tìm kiếm các phần tử trong DOM trong MooTools rất thuận tiện: foo.getElements ("[myAttr]") tìm tất cả các nút con của foo với thuộc tính myAttr. Sử dụng giải pháp được đề xuất của bạn sẽ phức tạp hơn nhiều và có khả năng chậm hơn. – KaptajnKold

0

Nếu trang được tuyên bố là HTML 4 nghiêm ngặt, thì không nên thêm thuộc tính không được sử dụng trong HTML đó. Khác biệt, không rõ các trình duyệt sẽ hoạt động như thế nào.
Như đã báo cáo, một cách để thêm các thuộc tính bổ sung là thêm chúng dưới dạng các lớp, ngay cả khi có một số hạn chế.

1

Hoặc có thể hiểu rằng một số trình duyệt sẽ chuyển sang "chế độ quirks" và hiển thị trang như thể nó không phải là HTML 4.0 nghiêm ngặt?

Không, thuộc tính xấu sẽ không bắt buộc thay đổi chế độ hiển thị.

Nếu bạn không quan tâm đến việc xác thực làm những gì bạn thích, nhưng xác nhận là một công cụ hữu ích để phát hiện các lỗi đơn giản mà bạn có thể không phải theo đuổi xung đột. Cho rằng có nhiều lựa chọn thay thế hoàn toàn tốt khác để chuyển dữ liệu sang JavaScript Tôi thích sử dụng một trong số đó thay vì bỏ qua xác nhận.

Ngoài ra, khi bạn thêm thuộc tính tùy ý, bạn đang chơi hiệu quả trong không gian tên chung. Không có gì đảm bảo rằng một số trình duyệt hoặc tiêu chuẩn trong tương lai sẽ không quyết định sử dụng tên ‘chìa khóa dịch’ cho một số tính năng mới sẽ đi lên kịch bản của bạn. Vì vậy, nếu bạn phải thêm thuộc tính, hãy đặt tên cho chúng là ít người biết đến và có khả năng là duy nhất hoặc chỉ sử dụng tiền tố HTML5 data-.

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