Могу ли я обнаружить ошибки синтаксического анализа XHTML, используя Javascript? - PullRequest
1 голос
/ 16 января 2009

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

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

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

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

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

Ответы [ 5 ]

2 голосов
/ 16 января 2009

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

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

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

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

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

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

1 голос
/ 16 января 2009

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

Следующие должны работать как минимум в 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);
})();
1 голос
/ 16 января 2009

Мой первый вопрос был бы таков: поскольку Internet Explorer не позволяет вам просто указывать application / xhtml + xml в качестве типа mime, и не поддерживать его настолько хорошо, зачем вам нужно обнаруживать ошибки синтаксического анализа XHTML?

Что касается обнаружения ошибок - взгляните на http://www.quirksmode.org

1 голос
/ 16 января 2009

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

0 голосов
/ 16 января 2009

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

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

...