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

StackOverflow https://stackoverflow.com/questions/449551

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

<Ол>
  • Не нужно.
  • (для опытных пользователей). Не делайте этого, если только вы не доказали, что делаете что-то, что не будет работать, если страница будет отображаться как text / html. Это относится к крошечной, крошечной доле процента документов XHTMl.
  • Если вы должны использовать свою страницу как application / xhtml + xml, сгенерируйте ее с помощью какого-либо метода, который гарантирует достоверность.
  • Если вы действительно не знаете, что делаете, никогда не используйте application / xhtml + xml для страницы, содержащей ввод пользователя.
  • Помните, что XHTML - это просто переформулировка HTML 4 плюс возможность встраивания других языков. Если вы не используете встраивание, то у вас есть HTML 4 с другим, но почти полностью совместимым синтаксисом. Подавляющее большинство документов XHTML там представлены в виде text / html и, таким образом, обрабатываются браузерами как HTML 4.

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

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top