Как бы вы предпочли <script>элементы обрабатываются? - PullRequest
1 голос
/ 12 ноября 2008

Представьте себе следующее.

  1. HTML разбирается в dom-дереве
  2. Узлы Dom становятся доступными программно
  3. Узлы Dom могут быть или не могут быть программно расширены
  4. Расширенные узлы повторно сериализуются в html.

У меня в первую очередь вопрос о том, как бы хотелось, чтобы тег "script" вел себя.

my $tree = someparser( $source ); 
....
print $somenode->text(); 
$somenode->text('arbitraryjavascript');
....
print $tree->serialize(); 

Или на этот счет.

Проблема возникает при принятии решения о том, как правильно обращаться с содержимым этого поля в отношении простоты использования и переносимости / удобства использования его выбросов.

То, что я хочу сделать сам, это:

 $somenode->text("verbatim"); 

->

  <script>
  // <!-- <![CDATA[ 
  verbatim
  // ]]> -->
  </script>

Так что то, что я создаю, является в некоторой степени безопасным и пригодным для проверки

Но я нерешителен, если делать это волшебным образом - хорошая идея, и должен ли я иметь код, который пытается обнаружить существующие копии «блоков безопасности» и заменить их / удалить их на фазе «разбора».

Если я не уберу это из ввода, я, вероятно, удвою на фазе вывода, особенно проблематично, если позже выход этого кода будет захвачен повторно.

Если я уберу это из ввода, это будет иметь полезный эффект, так как программно выбирая содержимое элемента скрипта, вы не увидите блоки безопасности на обоих концах.

В конечном итоге будет найден способ отключить некоторые из этих действий, но вопрос в том, каким должен быть / default / способ обработки и почему.

Вполне возможно, что все мои рассуждения здесь ошибочны, и текстовое содержимое должно оставаться полностью необработанным, если только оно не требуется обрабатывать.

Какое поведение вы ищете в таком инструменте? Пожалуйста, укажите что-нибудь в рассуждениях, которые я мог упустить из виду.


Сводка TLDR: Как я должен программно обрабатывать механизм escape- в этих сценариях, а именно безопасное заполнение '//<<code>!--<![CDATA[' на обоих концах, относительно ввода / вывода

Ответы [ 2 ]

1 голос
/ 12 ноября 2008

Я добавляю здесь свой ответ, так что более очевидно, что я пытаюсь выяснить. Текущая идея, на которой я остановился, будет выглядеть следующим образом:

my $html=<<'EOF'
<script>
//<!--<![CDATA[
foo
//]]>-->
</script>
EOF
#/# this line is here for the syntax highlighter
my $obj = parse($html); 
print $obj->text(); 
# foo
$obj->text("bar");
print $obj->text(); 
# bar
print $obj->html(); 
# <script>
# //<!--<![CDATA[
# bar
# //]]>-->
# </script>

Важными моментами являются:

  1. Механизмы защиты xml / html / legacybrowser / bot удалены для внутреннего представления кода.
  2. Таким образом, встроенным кодом можно манипулировать так, как если бы его там не было.
  3. Повторный экспорт модифицированного кода снова включает механизмы защиты.

если был

  1. Нет механизмов защиты
  2. Различные (то есть: нет //, или нет <!-, или нет <!) детали

существующие средства защиты будут сняты и заменены указанным выше стандартом по болотам.

0 голосов
/ 12 ноября 2008

Единственное, что я могу придумать, - это функции блока регистрового скрипта ASP.NET. У всех них есть перегрузка, которая принимает bool для того, должны ли теги сценария добавляться или нет.

Вот ссылка на документацию для одного:

http://msdn.microsoft.com/en-us/library/bahh2fef.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...