Tại sao không có HTML phía máy khách bao gồm thẻ?


18

Tôi đã có một câu hỏi được đặt ra cho tôi vào một ngày khác bởi một lập trình viên khác. Tôi nhớ (một thời gian dài trước đây) tự hỏi rất giống nhau. Tại sao thẻ bao gồm phía trình duyệt không bao giờ được xem xét? Hay là nó?

Cụ thể với một thẻ hướng dẫn trình duyệt bao gồm HTML bổ sung từ các nguồn khác. ví dụ <include src="http://server/foo/bar.html">. Nhiều người sẽ thực hiện các cuộc gọi javascript và điền vào innerHTMLđể thực hiện tương tự, khi cùng một công cụ javascript có thể được thực hiện bởi trình duyệt.

Sẽ rất đau đớn khi có các <HTML>s lồng nhau <BODY>(nghĩa là) nhưng chúng ta phải xem xét khía cạnh đó ở bất cứ đâu.


Đừng thực thể bên ngoài cung cấp cho bạn điều này đã?
Peter Taylor

Loại trừ được coi là một tính năng cốt lõi của siêu văn bản ngay cả từ phát minh của nó trong thập niên 60. Vì vậy, tôi chắc chắn rằng nó đã được xem xét ...
Alex Feinman

Câu trả lời:


12

Tôi có phải là người cuối cùng trên trái đất còn nhớ ( chỉ có Netscape 4 ) layerilayercác thẻ không?

Netscape 4 cũng cho phép các divthẻ để có một srcthuộc tính, mà thực hiện điều tương tự.

Netscape đã gửi chúng cho W3C, người đã chọn không bao gồm chúng sử dụng iframethay thế.


Tôi thực sự nhớ NS4 nhưng không nhớ các tính năng đó. Quá tệ, tôi vẫn nội dung nó sẽ tiết kiệm rất nhiều trình duyệt javascript BS.
Jé Queue

Tôi nhớ rằng ghét NS4 với niềm đam mê đến nỗi một trong những địa chỉ email không phải ISP đầu tiên của tôi là một tài khoản miễn phí tại ihatenetscape.com. À, thời gian tốt: D
wildpeaks

Các lớp lưu ý không phải là phía khách hàng bao gồm vì chúng vẫn có một documentđối tượng riêng biệt theo Chính sách nguồn gốc tương tự; chúng thực sự là một iframe có thể định vị.
bobince

14

Tại sao thẻ bao gồm phía trình duyệt không bao giờ được xem xét? Hay là nó?

Nó chắc chắn đã được yêu cầu bởi mọi tác giả web người mới chưa làm việc với Server Side Bao gồm, trở lại trong những ngày đầu trong danh sách www-html. Nhưng trong những ngày đó, W3 rất vui khi bỏ qua hoàn toàn áp lực của tác giả web.

Nếu bao gồm nhiều trang web được cho phép, nó sẽ là một thảm họa an ninh. Bạn có thể lấy một trang từ ngân hàng của người dùng và đọc nội dung từ đó. (Ban đầu, kịch bản DOM bị giới hạn, nhưng bạn vẫn có thể đọc từ document.links, document.imagescác chức năng tạo tập lệnh được bỏ bởi trang đích, v.v. Từ đó bạn có thể làm những gì bạn thích với nội dung được nhập.)

Nếu việc bao gồm nhiều trang web không được phép ... tốt thì tính năng này sẽ không có bất kỳ lợi thế nào so với phía máy chủ. Nó sẽ là nhiều hơn, làm việc chậm hơn cho khách hàng để làm rằng máy chủ có thể đã xử lý tốt hơn. Không giống như <iframe>, một bao gồm sẽ phải chặn tải trang. SSI sẽ vượt trội về mọi mặt.


5
Trên thực tế, máy khách (hoặc proxy) có thể lưu trữ bộ đệm hiệu quả hơn, vì các mẫu (hoặc tiêu đề / chân trang bao gồm) không có xu hướng thay đổi từ trang này sang trang khác, có nghĩa là người dùng ít nhất có thể nhìn thấy một phần của trang trong khi một số xử lý phía máy chủ đang diễn ra.
Alan Pearce

1
Nó sẽ làm nhiều hơn đáng kể so với máy chủ. Tôi không chắc tại sao cần chặn tải trang, nó có thể cho phép tải toàn bộ trang với nội dung không đồng bộ. Tất nhiên, nó có thể bị giới hạn bởi các trình duyệt chỉ cho phép kéo từ các máy chủ khởi tạo hoặc cho phép một DOM có tên miền.
Jé Queue

Tôi không hiểu làm thế nào nó là một thảm họa an ninh. Tôi có thể đọc một trang ngân hàng ở phía máy chủ ngay bây giờ và nhổ nó ra trên một trang khác - nó có phải là một thảm họa không? Có thể, nhưng chắc chắn không liên quan đến an ninh. Thảm họa bảo mật sẽ được đọc cookie từ một tên miền khác. Nếu không có phía máy khách này thì sẽ giống hệt như phía máy chủ. Đừng thấy có vấn đề gì ở đây cả.
serg

Bạn có thể thử tìm nạp trang ngân hàng ở phía máy chủ nhưng yêu cầu của bạn sẽ không được xác thực để bạn không thể tải xuống bất kỳ thông tin ngon ngọt nào. Một yêu cầu từ phía khách hàng bao gồm cookie và mã xác thực HTTP; nếu bạn có thể đọc phản hồi từ yêu cầu đó, bạn hoàn toàn có thể mạo danh người dùng.
bobince

@bobince: Có bất kỳ lý do nào mà yêu cầu ở phía máy khách sẽ phải bao gồm cookie và mã xác thực HTTP không? Kịch bản sử dụng chính mà tôi sẽ thấy cho phía khách hàng sẽ bao gồm cải thiện bộ nhớ đệm của nội dung trang tĩnh. Nếu tất cả mười sáu trang bao gồm cùng một tiêu đề và chân trang, sử dụng bao gồm phía máy khách sẽ tăng thời gian cần thiết để tải trang đầu tiên, nhưng giảm thời gian tải mười lăm còn lại. Các trường hợp sử dụng trong đó bao gồm sẽ hữu ích nhất sẽ chính xác là những trường hợp dữ liệu được "bao gồm" sẽ ở trạng thái tĩnh và do đó không cần ...
supercat

10

Họ đã làm. Nó trở thành <frameset>thẻ. Không lâu sau, họ đã thêm <iframe>thẻ.

Hầu hết các máy chủ web ban đầu được hỗ trợ phía máy chủ bao gồm, do đó, bao gồm văn bản phía máy khách có thể được cho là không cần thiết, với điều kiện là chức năng tương tự cũng có sẵn với các khung.


4
Không thực sự khung phục vụ một mục đích rất khác so với bao gồm. Cộng với các hạn chế đối với iframe đặc biệt là ở kích thước tập đối tượng chắc chắn không thể nghĩ đến vị trí của nó.
Jé Queue

5
Tôi không đồng ý - Tôi nghĩ đó chính xác là những gì khung hình làm. Những khung hình nào khác ngoại trừ bao gồm nhiều HTML hơn?
Jaco Pretorius

5
Các khung bao gồm HTML trong các khung, không trực tiếp - đây là sự khác biệt.
mbq

4
@Xepoch: ... Với một <iframe>. Đó là những gì nó làm . Nó thực sự không khác nhiều so <div>với mộtoverflow:auto;
greyfade

3
Phần tử <iframe> về cơ bản nói "tải tài liệu html được chỉ định và dán vào đây". Bạn sẽ chọn nó thay vì ajax nếu bạn muốn tài liệu được tải ngay lập tức, không phải trên một cuộc gọi javascript ... Các khung KHÔNG được bố trí cửa sổ của HTML. Div, p, br - đây là tất cả các yếu tố được sử dụng để bố trí. Bạn không sử dụng khung để bố trí (hoặc dù sao bạn cũng không nên).
Jaco Pretorius

3

Đối tượng vẫn hiển thị trong một khung và bạn không có quyền truy cập DOM vào "dữ liệu". Những gì các nhà phát triển nên được đưa ra nhiều năm trước là một cách để bao gồm các đoạn mã với một thẻ đơn giản. Ngay cả khi thẻ này có các hạn chế hộp cát miền, nó sẽ khá hữu ích để ngăn xếp các tính năng, cải thiện bảo trì và tận dụng bộ nhớ đệm của trình duyệt.

Tôi biết có rất nhiều plugin jquery tốt thực hiện điều này và rất nhiều tập lệnh phía máy chủ, nhưng không có lý do chính đáng để không hỗ trợ thẻ như vậy. IMO đó là một câu hỏi hay "Tại sao không có thẻ khách hàng bao gồm thẻ?"

Nếu bạn thích jquery thì đây là một ứng dụng khách tốt bao gồm tập lệnh: inc: Phía máy khách siêu nhỏ bao gồm plugin JavaScript jQuery


Câu trả lời của bạn là người duy nhất dường như đã đâm vào đầu đinh. Bạn đang nghĩ về một cái gì đó như #include trong C? Đây chính xác là ý nghĩa của "phía khách hàng" đối với tôi - một phương tiện để bao gồm các đoạn mã HTML tùy ý (chứ không phải toàn bộ tài liệu HTML) trong một tài liệu HTML dưới dạng nội dung tài liệu tách rời. Mặc dù nó có thể được thiết kế như một tính năng không thể thiếu của HTML chứ không phải là giai đoạn tiền phân tích cú pháp - cú pháp đề xuất <bao gồm src = "..."> của người hỏi sẽ phù hợp với điều này.
Stewart

Vấn đề với việc thêm nó bây giờ sẽ là khả năng tương thích ngược. Tất nhiên, điều này không giải thích tại sao nó không được bao gồm trong thiết kế ban đầu của HTML.
Stewart

Ngoài ra, nó có thể được thiết kế như một tính năng của SGML / XML nói chung hơn ....
Stewart

2

Bạn đã thử chưa

<object  type="text/html" data="page.html" height="500" width="500">
What I see if that didn't work 
</object>

Tôi nghĩ rằng điều đó được thực hiện trong hầu hết các trình duyệt.


Sẽ cần phải cố gắng.
Jé Queue

2

Các biến thể trên <include>thẻ thực sự được xem xét trong lịch sử ban đầu của HTML , nhưng chúng không bao giờ đi được rất xa.


1
Tuy nhiên, ngữ nghĩa của thẻ <include> đó tương tự như của khung / iframe / đối tượng ngày nay - nó sẽ bao gồm một tài liệu html và không chỉ là các đoạn văn bản / mã hoặc các thẻ ngẫu nhiên như #include của C.
Tomáš Pospíšek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.