Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Элемент script и его место в DOM  (Прочитано 20115 раз)
0 Пользователей и 1 Гость смотрят эту тему.
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« : 01-06-2011 12:54 » 

Хочу прояснить вопрос прежде чем ругаться с разработчиками...
Допустим, есть HTML страничка, в которой есть элемент <script> и следующий контент:
Код: (HTML)
<script id="CITmp" type="text/html">
<h2 class="pageTitle">Contact Information</h2>
<div>asd</div>
</script>
На всякий случай - схема документа объявлена как
Код:
<!-- DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" -->
но это как раз меньше всего что-то значит, учитывая весь стиль странички Жаль
Вопрос: содержимое этого тэга script учитывается в DOM дереве? Или же парсер должен воспринимать конкретно этот тэг как сплошной текст и игнорировать?
Если кто-то помнит ссылки на спеки по конкретно этому поводу - буду очень благодарен.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 01-06-2011 13:21 » 

http://ejohn.org/blog/javascript-micro-templating/
https://developer.mozilla.org/en/JavaScript_templates
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 01-06-2011 13:30 » 

baldr, я бы ругался.

В DTD указано, что внутри SCRIPT может быть только CDATA. Т.е. данный код не противоречит DTD. Но вот такой mime очень неоднозначен в контексте страницы.

Добавлено через 1 минуту и 31 секунду:
Слав, это мозиловские разработчики пишут. А как к этому отнесутся другие браузеры? А поисковики?
« Последнее редактирование: 01-06-2011 13:31 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 01-06-2011 13:38 » 

не только мозиловские

Не запрещен, значит разрешен. mimetype указан верно
Что должно произойти?
браузер должен обработать данные в зависимости от mimetype
Если не знает как обработать, то должен проигнорировать.
А вот поместит ли он его в DOM и когда и самое главное - где, интересный вопрос.
Я подумал об асинхронности загрузки тега script, но наверное я не прав.

так спонтанно родилось, а почему бы и нет? (не проверял)
<script type="text/html" src="header.html"></script>




Добавлено через 1 минуту и 13 секунд:
такие вещи делают для клоакинга - сокрытия данных.
ПС за это могут настучать по голове...

Добавлено через 4 минуты и 48 секунд:
опять же... ведь можно и проверить попадает ли содержимое в DOM после onload

getElementsByTag("h2")
« Последнее редактирование: 01-06-2011 13:44 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #4 : 01-06-2011 13:47 » 

Да, это именно темплейты. Разработчики их очень активно используют да и пусть бы.
Проблема в том, что если есть темплейт с элементом внутри, который имеет атрибут id, а потом этот темплейт применяется к какой-то части страницы - то этот id получается не уникальным в пределах страницы, что грубо противоречит W3C.
Если же содержимое script не должно парситься, то формально такое было бы допустимо.

А написание автоматических тестов для таких страниц превращается в АД...
XPath использовать невозможно из-за того, что страницы меняются довольно часто и из-за его жутких тормозов в IE. Единственный надежный и удобный способ - привязка к ID элементов саботируется разработчиками Жаль
Пишу на каждый случай баги - их решают уже по факту.. Жаль
Третий день сижу чиню тесты.. Жаль Жаль

Добавлено через 1 минуту и 20 секунд:
Sla, получается что попадает. То есть браузер ведет себя вот так. Но есть ли какие-то формальные условия на это?
« Последнее редактирование: 01-06-2011 13:48 от baldr » Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 01-06-2011 13:51 » 

Цитата
Проблема в том, что если есть темплейт с элементом внутри, который имеет атрибут id
А вот за это нужно быть в морду. Тогда зачем темплейт?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 01-06-2011 13:53 » 

Надо потестить. В FF с плагином FireBug можно видеть DOM в динамике.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 01-06-2011 14:02 » 

вот у мелкомягких нашел
http://connect.microsoft.com/VisualStudio/feedback/details/670210/allow-type-text-html-in-script-tag-for-html5-validation
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #8 : 01-06-2011 14:41 » 

Sla, к сожалению это не описывает никакого поведения Жаль
Только косвенно подтверждает что разработчики MS не задумывались о таком использовании.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 01-06-2011 15:07 » 

Я тогда еще одну ссылочку здесь оставлю
http://www.bennadel.com/blog/1605-jQuery-AJAX-Strips-Script-Tags-And-Inserts-Them-After-Parent-Most-Elements.htm

почти по теме...
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 01-06-2011 17:01 » 

Еще один факт: тег script, согласно DTD, не может иметь идентификатора. Да, браузеры все равно переваривают, но валидацию такой код не пройдет.

Добавлено через 1 минуту и 6 секунд:
Код: (HTML)
<!-- DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" -->
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>Тест — html внутри &lt;script&gt;</title>
</head>
<body>
    <script type="text/html" id="tpl_1">
        <span id="id">Оригинальный текст.</span>
    </script>

    <div id="out"></div>

    <script type="text/javascript">
        var tpl = document.getElementById('tpl_1').innerHTML;
        document.getElementById('out').innerHTML = tpl + '<br>' + tpl;
        document.getElementById('id').innerHTML = 'Замененный текст.';
    </script>
</body>
</html>

FF 3.6, IE 7 - работает.
Валидатор ругается на script/id() и span внутри.

Из одного шаблона создается два span-элемента с одинаковым id. Адресуем только первый. CSS #id влияет на обоих.

Такой результирующий код выдал Firebug:

Код: (HTML)
<html><head><!-- DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" -->


    <meta content="text/html; charset=utf-8" http-equiv="content-type">
    <title>Тест &mdash; html внутри &lt;script&gt;</title>
</head><body>
    <script id="tpl_1" type="text/html">
        &lt;span id="id"&gt;Оригинальный текст.&lt;/span&gt;
    </script>

    <div id="out">
        <span id="id">Замененный текст.</span>
    <br>
        <span id="id">Оригинальный текст.</span>
    </div>

    <script type="text/javascript">
        var tpl = document.getElementById('tpl_1').innerHTML;
        document.getElementById('out').innerHTML = tpl + '&lt;br&gt;' + tpl;
        document.getElementById('id').innerHTML = 'Замененный текст.';
    </script>
</body></html>
« Последнее редактирование: 01-06-2011 17:09 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 01-06-2011 20:54 » 

Подумалось...

Какое-то надуманное решение для клиентского шаблона...
Как по мне, то проще создать какой нибудь класс, и его передавать в клиентскую часть
Класс и методы add и get


Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 01-06-2011 22:02 » 

Э.... DOCTYPE то неверный!
Не <!-- DOCTYPE ... -->, а <!DOCTYPE ... >!!!

Добавлено через 1 минуту и 29 секунд:
Слав, согласен. Можно шаблоны через AJAX подгружать без вопрос несовместимости.

Добавлено через 3 минуты и 44 секунды:
Валидатор не любит закрывающи тегов там, где они не положены. Странно, учитывая, что контент script — CDATA.
« Последнее редактирование: 01-06-2011 22:07 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #13 : 02-06-2011 06:38 » 

Спасибо всем, в общем все более-менее понятно. Как я и предполагал, такое использование всех повергает в недоумение Улыбаюсь
И это вы еще остального кода не видели... А там вообще хаос вроде css-атрибутов, которые не должны влиять на конкретный тэг и т.п.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 02-06-2011 07:02 » 

Кстати, достоинство шаблона отдельным файлом в том, что можно управлять его политикой кеширования отдельно от страницы. Например, шаблон закешировать на час, а страницу не кешировать.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #15 : 02-06-2011 07:16 » new

Я же не говорю что шаблон это плохо.. С появлением AJAX его появление и развитие было очевидным...
Я сам их использую, но стараюсь не нарушать правил и не придумывать своих поверх существующих...
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines