2010-01-18 44 views
7

Tôi muốn có thể xuất tệp HTML bao gồm hình ảnh (trong chính tệp đó). Bởi Googling, tôi đã đi qua một vài cách để làm điều này:Làm thế nào để mã hóa dữ liệu hình ảnh trong một tệp HTML?

  • javascript:imageData
  • một dữ liệu URI như <IMG SRC="data:image/gif;base64,[...]">
  • <object ... > thẻ (mặc dù điều này sử dụng một dữ liệu URI, như vậy có thể kế thừa cùng giới hạn)

Nhưng tôi không biết trình duyệt nào được trình duyệt hỗ trợ tốt hơn hoặc nếu có các lựa chọn thay thế khác.

Có ai có kinh nghiệm thực tế về đề nghị này cho tôi lời khuyên không? Cảm ơn.

+1

Một tùy chọn tương tự khác nhưng không hoàn toàn HTML sẽ là MHTML. http://en.wikipedia.org/wiki/MHTML – bobince

+0

MHTML kém được hỗ trợ tốt bởi trình duyệt, nhưng có thể đọc được bởi Microsoft Word ... đáng để suy nghĩ, có thể. –

Trả lời

8

Liên quan đến hỗ trợ trình duyệt, từ Wikipedia:

URI Dữ liệu hiện đang được hỗ trợ bởi các trình duyệt web sau đây:

  • Gecko và các dẫn xuất của nó, chẳng hạn như Mozilla Firefox
  • Opera
  • KDE, thông qua hệ thống đầu vào/đầu ra KIO. Điều này cho phép trình duyệt KDE, Konqueror hỗ trợ URI dữ liệu.
  • Safari; mặc dù công cụ dựng hình của Safari, WebKit, là một dẫn xuất của công cụ KHTML của Konqueror, Mac OS X không chia sẻ kiến ​​trúc nô lệ KIO để các triển khai không được chia sẻ.
  • Safari dành cho iPhone;
  • Google Chrome
  • Internet Explorer 8; Microsoft đã hạn chế hỗ trợ cho một số nội dung "không thể điều hướng", chẳng hạn như trong thẻ và quy tắc CSS, vì lý do bảo mật, bao gồm các lo ngại rằng JavaScript được nhúng trong URI dữ liệu có thể không giải thích được bằng bộ lọc tập lệnh. khách hàng. URI dữ liệu phải nhỏ hơn 32k.
  • Trình duyệt Thế giới; là trình duyệt trình duyệt IE có hỗ trợ tích hợp cho sơ đồ URI dữ liệu

IE không xử lý thẻ <object> chính xác, xem here để biết thêm chi tiết. Tóm lại, bạn không thể tin tưởng IE để hiển thị hình ảnh từ nó.

javascript:imageData cũng không được hỗ trợ tốt vì nó được sử dụng trong nhiều cuộc tấn công tập lệnh chéo trang web.

Có nhiều cuộc thảo luận về this trên web và tất cả đều đi đến kết luận rằng không có cách phổ biến tốt để nhúng hình ảnh. Nếu bạn chỉ cần hỗ trợ một tập hợp con của các trình duyệt, dữ liệu uri có thể hoạt động hoặc kết hợp dữ liệu uri và javascript.

+0

Điều này có nghĩa là bạn thích javascript: phương thức imageData không? hoặc có giới hạn cho cả hai phương pháp? –

+0

Xem chỉnh sửa ở trên - javascript: imageData của tôi có lẽ là phương pháp ít hữu ích nhất, vì nhiều trình duyệt được loại bỏ vectơ cho các cuộc tấn công tập lệnh chéo trang web. – jball

+0

Cảm ơn, jball - liên kết Tarquin hữu ích. –

1

imageData linh hoạt hơn, ví dụ: một số nghĩa là hạn chế dữ liệu chuyển thành 32k.

1

Các dữ liệu URI scheme là hợp lý được hỗ trợ tốt ngoại trừ trong Internet Explorer trước khi phiên bản 8.

Javascript URI là, tôi nghĩ rằng, tốt hơn một chút hỗ trợ nhưng thất bại nếu JS là không có.

Điều tốt nhất bạn có thể làm là gắn bó với các tài nguyên hình ảnh bên ngoài.

+0

Tôi có nên cung cấp cả hai tùy chọn, với thử nghiệm hỗ trợ JS không? –

+0

Bạn không thể. Các phần tử img không có hỗ trợ dự phòng cho thuộc tính src và các phần tử đối tượng được hỗ trợ kém (đặc biệt là trong Internet Explorer) – Quentin

0

URI dữ liệu sẽ không hoạt động ở < IE8. IE8 hỗ trợ chúng lên đến 32KB.

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