Неудивительно, что ошибки в Firefox обрабатываются иначе, чем в IE. Сталкиваясь с ошибкой, IE помещает информацию о ней в объект раг-seError. Когда Firefox сталкивается с ошибкой, он загружает в XML DOM документ XML, содержащий информацию об ошибке. Рассмот¬рим следующий пример:
var sXml = "Jeremy McPeak"; var oParser = new 00MParser();
var oXmlDom = oParser.parseFromString(sXml,"text/xml");
if (oXmlDom.documentElement.tagName != "parsererror") {
// Ошибок не обнаружено, можно продолжать работу. } else {
а1ег1("Возникла ошибка!");
}
В выделенной строке преднамеренно допущена ошибка - отсутствует «врывающий тег элемента . Когда загружается документ TML, имеющий некорректную структуру, объект XML DOM загружа¬ет документ с информацией об ошибке, корневой элемент которого на-аывается . Наличие ошибки можно легко определить, •братавшись к свойству documentElement. tagName; если там есть строка psrsererror, то можно быть уверенным, что во время загрузки этого до-жумента возникла ошибка.
Документ с информацией об ошибке, созданный в этом примере, вы¬водит так:
|fe
^Parsing Error: mismatched tag. Expected; . . Location: http://yoda/fooreader/test.htm
Line Number 1, Column 43:Jeremy McPeak
"
В документе имеется вся необходимая информация об ошибке в в простого текста. Для того чтобы извлечь эту информацию прогр" ным способом, сначала надо разобрать ее. Самый простой способ лать это - воспользоваться следующим регулярным выражением:
var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column (\d+):([\s\S].?)(?:\-A~)/;
Это регулярное выражение делит документ с сообщением об ошибке пять разделов: текст сообщения, имя файла, в котором была обн жена ошибка, номер строки, позиция в строке и исходный текст, к рый вызвал ошибку. Посредством метода test(), объекта регуляр выражения, можно получить доступ к этим разделам:
if (oXmlOom.firstChild.tagName != "parsererror") {
// Ошибок не обнаружено, можно продолжать работу. , , } else {
var oXmlSerializer = new XMLSerializerQ; var sXmlError = oXmlSerializer.serializeToString(oXmlDom); var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Col (\d+):([\s\S].?)(?:\-A")/;
reError.test(sXmlError);
Первый блок данных, захваченный регулярным выражением, -щение об ошибке, второй - имя файла, третий - номер строки, че тый - позиция в строке и пятый - исходный код. На основе пол; ной информацию можно создать собственное сообщение об ошибке:
var str = "Возникла ошибка!!!\п" +
"Описание; " + RegExp.$1 + "\п" + . . "Файл: " + RegExp.$2 + "\п" + "Строка: " + RegExp.$3 + "\п" + "Позиция в строке: " + RegExp.$4 + "\п" + "Исходный код: " + RegExp.$5;
alert(str);
Если возникнет ошибка, на экране появится окно с соответствую информацией, представленной в удобочитаемом виде.