Не удается отобразить страницу, или разрывы DOMDocumentFragment в тегах <script>или что-то в этом роде - PullRequest
0 голосов
/ 20 января 2011

После некоторых проб и ошибок я заметил, что мой движок шаблонов не работает с файлами шаблонов, которые содержат теги <script>.Это, безусловно, огромная проблема, но я не могу понять, почему она терпит неудачу.

Это тоже очень своеобразно, то, как это терпит неудачу.С тегами <script>, закомментированными, страница загружается нормально, однако с тегами <script> без комментариев, страница загружается, и выполнение Просмотр источника показывает, что загружена вся страница, хотя ничего не отображаетсяв браузере.Инспектор DOM Firebug показывает тег заголовка и пустое тело.

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

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

Короче говоря, мой шаблонизатор создает один объект DOMDocument, а затем создает DOMDocumentFragment объекты для управления частями шаблона.Первая итерация синтаксического анализа обычно загружает весь файл шаблона во фрагмент, а затем работает по дереву на основе определенных параметров, ища определенные теги.

TL; DR: Кто-нибудь знает, почему PHPКлассы DOM не могут правильно построить страницу из-за тегов скрипта?Если я заключу их в теги <![CDATA[ ... ]]>, это ничего не даст.Только когда я удаляю или комментирую теги, браузер загружает и рендеринг страницы.

1 Ответ

2 голосов
/ 20 января 2011

Содержимое тега сценария заключено в блок CDATA?Если это не так, DOM попытается проанализировать его содержимое и потерпит неудачу.Убедитесь, что весь код сценария заключен в блоки CDATA, и что анализатор DOM настроен на вывод блоков CDATA (в противном случае выходные данные будут содержать пустые теги сценария).

Я бы также советовал размещать как можно больше кода скрипта вне страницы и помещать его в свои собственные файлы, на которые вы затем ссылаетесь с помощью <script src="/path/to/script.js"></script> разметки.Это позволяет избежать проблемы синтаксического анализа DOM и дает дополнительное преимущество, заключающееся в том, что браузеру нужно только загрузить код один раз и сохранить его в кэше при последующих просмотрах страницы.

...