Могу ли я обнаружить ошибки синтаксического анализа XHTML с помощью Javascript?

Когда у меня есть ошибка разметки на моей XHTML-странице, Mozilla Firefox отображает «Желтый экран смерти», показывая только большое красное сообщение об ошибке на желтом фоне.

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

Есть ли способ обнаружить их с помощью Javascript и, таким образом, отправить сообщение обратно на сервер?

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

Остальные вопросы: - Какие доступны события, которые я мог бы прослушать, чтобы обнаружить это? (Опрос - отстой.) - Как я могу обнаружить это в других браузерах?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
1 176
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

Обязательно пропустите ваши файлы через синтаксический анализатор для обнаружения ошибок, но делайте это в автономном режиме - риск показать пользователям YSOD того не стоит!

Transition / Strict нет ни здесь, ни там, они оба не смогут выполнить синтаксический анализ, если вы передаете неверно сформированный контент как XML. Но да, проверка правильности до того, как она попадет к пользователю, - это лучший способ.

bobince 16.01.2009 14:36

Это не отвечает на ваш вопрос, но вместо этого почему бы не проверить ваш XHTML на вашем сервере после / после его создания и перед отправкой в ​​браузер?

Ответ принят как подходящий

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

Я знаю, что это не то, о чем вы просили, но если вы не делаете что-то действительно специфичное для XHTML, например встраивание какого-либо другого языка разметки, вам следует обслуживать свою страницу как text / html вместо application / xhtml + xml. Даже если это XHTML. Обслуживая его как text / html, вы избежите проблемы, с которой столкнулись, и позволите своей странице работать и в IE. Обратите внимание, что именно тип MIME, а не объявление doctype определяет, какой синтаксический анализатор используется - использование переходного doctype этого не сделает.

Тем не менее, если вы действительно уверены, что хотите, чтобы ваша страница была проанализирована как XHTML, лучше обрабатывать такую ​​ошибку на сервере. Создайте свою страницу, построив DOM, а затем отправьте результат сериализации. Если это не вариант, начните с создания страницы, как сейчас, но пока не передавайте ее клиенту. Возьмите созданный вами XHTML и проанализируйте его на стороне сервера с помощью проверяющего синтаксического анализатора XHTML (или, по крайней мере, универсального синтаксического анализатора XML). Если вы получаете ошибки, отобразите любую страницу с ошибками, которую хотите. В противном случае сериализуйте проанализированную модель DOM и отправьте ее клиенту.

Таким образом, основные правила использования application / xhtml + xml:

  1. Не надо.
  2. (Для опытных пользователей) Не делайте этого, если вы не доказали, что делаете что-то, что не сработает, если страница обслуживается как text / html. Это относится к крошечной, крошечной доле процента документов XHTM1.
  3. Если вы должны обслуживать свою страницу как application / xhtml + xml, сгенерируйте ее каким-либо методом, гарантирующим действительность.
  4. Если вы В самом деле не знаете, что делаете, никогда использует application / xhtml + xml для страницы, которая включает пользовательский ввод.

Помните, что XHTML - это просто переформулировка HTML 4 плюс возможность встраивать другие языки. Если вы не используете встраивание, у вас будет HTML 4 с другим, но почти полностью совместимым синтаксисом. Подавляющее большинство документов XHTML обслуживаются как text / html и, таким образом, обрабатываются браузерами как HTML 4.

+1 ко всему этому, за исключением того, что пользовательский ввод в XHTML не более опасен, чем простой старый HTML; если злоумышленник может проникнуть внутрь, возникает дыра в безопасности XSS, которая должна быть как минимум такой же серьезной, как и YSOD.

bobince 16.01.2009 14:39

Нет, вам абсолютно не следует использовать xhtml как text / html - xhtml не является html, и все те браузеры, которые поддерживают xhtml (например, все, кроме IE), будут переведены в строгий режим html с помощью doctype, так что теперь у вас есть IE в quirks mode html, а все остальные браузеры в строгом режиме с битым контентом.

olliej 16.01.2009 21:00

Мой первый вопрос: поскольку 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);
})();

Другие вопросы по теме