Когда у меня есть ошибка разметки на моей XHTML-странице, Mozilla Firefox отображает «Желтый экран смерти», показывая только большое красное сообщение об ошибке на желтом фоне.
Хотя эти ошибки редки, они недружелюбны для пользователя очень сильно.
Есть ли способ обнаружить их с помощью Javascript и, таким образом, отправить сообщение обратно на сервер?
Что я обнаружил на данный момент:
- Скрипты, размещенные до ошибки синтаксического анализа, все еще выполняются. (Конечно.)
- Таймауты и интервалы, которые были установлены в этих сценариях, все равно будут выполняться после ошибки синтаксического анализа.
- В Firefox DOM представляет собой <parsererror> с <sourcetext> внутри. Я могу обнаружить это, если запрошу document.firstChild.tagName.
Остальные вопросы: - Какие доступны события, которые я мог бы прослушать, чтобы обнаружить это? (Опрос - отстой.) - Как я могу обнаружить это в других браузерах?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я знаю, что это, вероятно, не самый полезный ответ, но думали ли вы о переходе на переходный тип документа?
Обязательно пропустите ваши файлы через синтаксический анализатор для обнаружения ошибок, но делайте это в автономном режиме - риск показать пользователям YSOD того не стоит!
Это не отвечает на ваш вопрос, но вместо этого почему бы не проверить ваш XHTML на вашем сервере после / после его создания и перед отправкой в браузер?
Выявление ошибок синтаксического анализа на клиенте возможно, но на самом деле это решает не ту проблему.
Я знаю, что это не то, о чем вы просили, но если вы не делаете что-то действительно специфичное для XHTML, например встраивание какого-либо другого языка разметки, вам следует обслуживать свою страницу как text / html вместо application / xhtml + xml. Даже если это XHTML. Обслуживая его как text / html, вы избежите проблемы, с которой столкнулись, и позволите своей странице работать и в IE. Обратите внимание, что именно тип MIME, а не объявление doctype определяет, какой синтаксический анализатор используется - использование переходного doctype этого не сделает.
Тем не менее, если вы действительно уверены, что хотите, чтобы ваша страница была проанализирована как XHTML, лучше обрабатывать такую ошибку на сервере. Создайте свою страницу, построив DOM, а затем отправьте результат сериализации. Если это не вариант, начните с создания страницы, как сейчас, но пока не передавайте ее клиенту. Возьмите созданный вами XHTML и проанализируйте его на стороне сервера с помощью проверяющего синтаксического анализатора XHTML (или, по крайней мере, универсального синтаксического анализатора XML). Если вы получаете ошибки, отобразите любую страницу с ошибками, которую хотите. В противном случае сериализуйте проанализированную модель DOM и отправьте ее клиенту.
Таким образом, основные правила использования application / xhtml + xml:
Помните, что XHTML - это просто переформулировка HTML 4 плюс возможность встраивать другие языки. Если вы не используете встраивание, у вас будет HTML 4 с другим, но почти полностью совместимым синтаксисом. Подавляющее большинство документов XHTML обслуживаются как text / html и, таким образом, обрабатываются браузерами как HTML 4.
+1 ко всему этому, за исключением того, что пользовательский ввод в XHTML не более опасен, чем простой старый HTML; если злоумышленник может проникнуть внутрь, возникает дыра в безопасности XSS, которая должна быть как минимум такой же серьезной, как и YSOD.
Нет, вам абсолютно не следует использовать xhtml как text / html - xhtml не является html, и все те браузеры, которые поддерживают xhtml (например, все, кроме IE), будут переведены в строгий режим html с помощью doctype, так что теперь у вас есть IE в quirks mode html, а все остальные браузеры в строгом режиме с битым контентом.
Мой первый вопрос: поскольку Internet Explorer не позволяет вам указать application / xhtml + xml в качестве типа mime и не поддерживает его, зачем вам обнаруживать ошибки синтаксического анализа XHTML?
Что касается обнаружения ошибок - посмотрите http://www.quirksmode.org
Я бы рекомендовал проверить документ на стороне сервера. Но если вы действительно хотите сделать это на стороне клиента, нет ничего плохого в опросе, если все сделано правильно (что означает, что опрос гарантированно завершится).
Следующие должен работают как минимум в Firefox и Opera:
(function() {
if (document.documentElement &&
document.documentElement.getAttribute('xmlns') !==
'http://www.w3.org/1999/xhtml') {
alert('parsing errors');
}
else if (document.body && document.body.lastChild) {
alert('no parsing errors');
}
else setTimeout(arguments.callee, 100);
})();
Transition / Strict нет ни здесь, ни там, они оба не смогут выполнить синтаксический анализ, если вы передаете неверно сформированный контент как XML. Но да, проверка правильности до того, как она попадет к пользователю, - это лучший способ.