Чому жоден HTML-код на стороні клієнта не включає тег?


18

Днями у мене виникло запитання іншого програміста. Пам’ятаю (дуже давно), як дивувався саме тому. Чому тег включення на стороні браузера ніколи не розглядався? Або це було?

Зокрема, з тегом, який доручив браузеру включати додатковий HTML з інших джерел. напр <include src="http://server/foo/bar.html">. Багато людей здійснюватимуть дзвінки Javascript та заповнюватимуть innerHTMLте саме, коли браузер може виконувати те ж саме поза механізмом javascript.

Було б боляче вкладати <HTML>s <BODY>(тобто), але ми повинні враховувати цей аспект де завгодно.


Чи зовнішні суб’єкти цього не дають вам вже?
Пітер Тейлор

Переключення вважалося основною особливістю гіпертексту ще з його винаходу в 60-х роках. Тож я впевнений, що це було розглянуто ...
Алекс Фейнман

Відповіді:


12

Я остання людина на землі, яка пам’ятає (лише Netscape 4 ) layerта ilayerтеги?

Netscape 4 також дозволилоdiv тег мати srcатрибут, який скоїв то ж саме.

Netscape подав їх до W3C, який вирішив не включати їх - використовувати iframeзамість цього.


Я дійсно пам’ятаю NS4, але не пам'ятаю цих особливостей. Шкода, я все одно контент, це врятувало б багато крос-браузерного JavaScript BS.
Черга Jé

Я пам’ятаю ненависть NS4 з такою пристрастю, що однією з моїх перших електронних адрес, що не належать до провайдерів, був безкоштовний обліковий запис на ihatenetscape.com. Ах, хороші часи: D
дикі вершини

Шари зауважень не були досить клієнтською стороною, оскільки вони все ще мали окремий documentоб'єкт, що підпадає під політику того самого оригіналу; вони були фактично позитивною рамкою.
bobince

14

Чому тег на стороні браузера ніколи не розглядався? Або це було?

Це, безумовно, просив кожен новичок веб-автор, який ще не розробляв серверні включення, ще в перші дні в списку www-html. Але в ті часи W3 із задоволенням повністю ігнорували тиск на веб-авторів.

Якщо дозволить включити міжміські сайти, це стане катастрофою для безпеки. Ви можете перетягнути сторінку з банку користувача і прочитати вміст з неї. (Спочатку сценарій DOM був обмеженим, але ви все ще можете читати з document.links, document.imagesсценарії функції, скинуті цільовою сторінкою тощо. Відтоді ви можете робити те, що вам подобається, імпортованим вмістом.)

Якщо включення між веб-сайтами не було дозволено ... ну тоді ця функція не мала б жодної переваги перед включенням із боку сервера. Для клієнта було б більше, повільніше працювати, щоб сервер міг впоратися краще. На відміну від <iframe>, включити доведеться блокувати завантаження сторінки. SSI були б у всіх сенсах вищими.


5
Насправді клієнт (або проксі) може кешувати ефективніше, оскільки шаблони (або заголовок / колонтитул включає в себе) не мають тенденції змінюватися від сторінки до сторінки, тобто користувач може принаймні мати можливість бачити частину сторінки, хоча деякі триває обробка на стороні сервера.
Алан Пірс

1
Це зробило б значно більше, ніж сервер. Я не впевнений, чому потрібно блокувати завантаження сторінки, це могло б дозволити повне завантаження сторінки за допомогою заповнення вмісту async. Звичайно, браузери можуть обмежуватись лише тим, що дозволяють витягувати з початкових серверів або дозволяти доменний DOM.
Черга Jé

Я не розумію, як це катастрофа безпеки. Я можу зараз прочитати сторінку банку на стороні сервера і виплюнути її на іншу сторінку - це лихо? Можливо, але точно не стосується безпеки. Катастрофа безпеки - це читання файлів cookie з іншого домену. Без цієї сторони клієнта включення було б точно таким же, як і на стороні сервера. Тут не бачите жодних проблем.
серг

Ви можете спробувати отримати банківську сторінку на стороні сервера, але ваш запит буде не автентифікований, тому ви не можете завантажити будь-яку соковиту інформацію. Запит з боку клієнта включає файли cookie та маркери аутентифікації HTTP; якщо ви можете прочитати відповідь з такого запиту, ви можете повністю себе представити.
bobince

@bobince: Чи є якась причина, що запит на стороні клієнта повинен містити файли cookie та маркери аутентифікації HTTP? Основний сценарій використання, який я б бачив для клієнта, включав би покращення кешування статичного вмісту сторінки. Якщо всі шістнадцять сторінок включають один і той же колонтитул і колонтитул, використання на стороні клієнта включає збільшить час, необхідний для завантаження першої, але скоротить час для завантаження решти п'ятнадцяти. Випадки використання, коли включити було б найбільш корисно, були б саме ті, де дані "включені" були б статичними і, таким чином, не потрібні ...
supercat

10

Вони зробили. Це стало <frameset>міткою. Невдовзі вони додали <iframe>тег.

Більшість ранніх веб-серверів, які підтримуються на сервері, включає, тому текстовий текст на стороні клієнта, ймовірно, вважається непотрібним, враховуючи, що така ж функціональність була доступна і для кадрів.


4
Насправді кадри служать зовсім іншій цілі, ніж включення. Плюс обмеження на рамки iframe, особливо в розмірі набору об'єктів, напевно, не могли б подумати, щоб зайняти його місце.
Черга Jé

5
Я не згоден - я думаю, що саме це і роблять кадри. Для чого ще є фрейми, крім включення більше HTML?
Яко Преторій

5
Кадри включають HTML у фрейми, а не безпосередньо - у цьому різниця.
mbq

4
@Xepoch: ... З а <iframe>. Ось що це за . Це насправді не сильно відрізняється від <div>зoverflow:auto;
greyfade

3
Елемент <iframe> в основному говорить: "завантажте вказаний html документ і вставте його сюди". Ви б вибрали його замість ajax, якщо ви хочете, щоб документ був завантажений негайно, а не під час виклику javascript ... Кадри НЕ відкривають макет HTML. Div, p, br - це всі елементи, які використовуються для компонування. Ви не використовуєте кадри для планування (або в будь-якому разі не повинні).
Яко Преторій

3

Об'єкт все ще відображається у кадрі, і ви не маєте доступу DOM до "даних". Те, що розробникам слід було дати років тому, це спосіб включити фрагменти з простим тегом. Навіть якби цей тег мав обмеження в області пісочного домену, було б дуже корисно розділити функції, покращити технічне обслуговування та скористатися кешуванням браузера.

Я знаю, що є багато хороших плагінів jquery, які роблять це, і багато скриптів на стороні сервера, але немає жодної вагомої причини не підтримувати такий тег. IMO - це гарне запитання "Чому жоден клієнт не включає тег?"

Якщо вам подобається jquery, тут є хороший клієнт, включайте скрипт: inc: Супер крихітний на стороні клієнта включає плагін JavaScript jQuery


Ваша відповідь єдина, яка, здається, вдарила цвяхом по голові. Ви думаєте про щось на кшталт #include in C? Це саме така річ, яка "для мене від клієнта включають" означає для мене - засоби для включення довільних фрагментів HTML (а не цілих HTML-документів) до документа HTML як цілісного вмісту документа. Хоча це може бути розроблено як цілісна особливість HTML, а не як етап попереднього розбору - пропонований запитувачем синтаксис <include src = "..."> синтаксис цілком відповідає цьому.
Стюарт

Проблемою з його додаванням тепер буде зворотна сумісність. Звичайно, це не пояснює, чому вона не була включена в оригінальний дизайн HTML.
Стюарт

В іншому випадку це може бути розроблено як особливість SGML / XML загалом ....
Стюарт

2

Ти намагався

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

Я думаю, що це реалізовано в більшості браузерів.


Потрібно буде спробувати.
Черга Jé

2

Варіанти <include>тегу дійсно розглядалися в першій історії HTML , але вони ніколи не потрапляли дуже далеко.


1
Однак семантика цього тегу <include> була схожа на сьогоднішню фрейм / iframe / об'єкт - вона включала б html- документ , а не просто фрагменти тексту / коду чи випадкові теги, як це було б #include C.
Tomáš Pospíšek
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.