понедельник, 9 марта 2009 г.

Ошибка oTidyBrowser is not defined

Как справедливо подмечено неизвестно кем неизвестно где: «Трудности нас закаляют, а мелочи добивают». Крайний раз такой противной мелочью для меня стала ошибка javascript oTidyBrowser is not defined, случайным образом появляющаяся при просмотре различных сайтов.


Значительную часть своего рабочего времени я провожу за разработкой фронт-энда и любые красные значки в строке состояния браузера неприятно раздражают нежный орган моего профессионального обоняния. Независимо от того, работаю я в данный момент, гуглю или читаю блоги. А добрая часть времени, проведенная с накрученными в канат яйцами нервами, разумеется, не лучшим образом сказывается на качестве труда и отдыха. Или отдыха и труда.


Ошибка oTidyBrowser is not defined – это глюк Tidy, входящего в состав дополнения для Mozilla Firefox HTML Validator. Поскольку разработчик так и не пофиксил эту неожиданную «фичу», то для решения проблемы ошибки Tidy придется воспользоваться анекдотичным приемом «после сборки обработать напильником».


Решение проблемы “oTidyBrowser is not defined”


Исходная статья на английском языке расположена здесь: Hackzilla.org - Firefox Addon: Html Validator


  1. Перво-наперво, нужно найти файл tidyBrowser.js
    Точного пути указать не получится, поскольку он зависит от имени пользователя, установленной операционной системы и сгенерированного профайла Firefox. Автор указывает такой путь:
    C:\Users\Dan\AppData\Roaming\Mozilla\Firefox\Profiles\vqy7rs08.default\extensions\{3b56bcc7-54e5-44a2-9b44-66c3ef58c13e}\chrome
    В общем случае, в Windows XP путь будет выглядеть примерно так:
    C:\Documents and Settings\Имя пользователя\Application Data\Mozilla\Firefox\Profiles\профайл Firefox\extensions\{3b56bcc7-54e5-44a2-9b44-66c3ef58c13e}\chrome\
  2. В папке chrome ты обнаружишь файл tidy.jar
    На самом деле это zip-файл. Скопируй его и переименуй в “tidy.zip”
  3. Открой полученный файл прямо в менеджере архивов. Например, – в WinRAR.
  4. Открой в редакторе файл “content/tidyBrowser.js”. Начиная со строки 220 ты найдешь следующий код:
    if( oTidyBrowser.bTopLoadBusy==false )
    {
    oTidyUtil.tidy.log( ‘<javascript>tidyEndDocumentLoadObserver’ );
    oTidyBrowser.bTopLoadBusy = true;
    try
    {
    // Validate the 1rst request
    oTidyBrowser.bIgnorePageShow = true;
    oTidyBrowser.validateFrame( window.content );
    // oTidyBrowser.validateCache( subject.document, true );

    // Process the events that fired during the 1rst one
    // ex: page with frames.
    var doc = oTidyBrowser.oEventQueue.pop();
    while( doc )
    {
    oTidyBrowser.validateCache( doc, true );
    doc = oTidyBrowser.oEventQueue.pop();
    }
    }
    catch(ex)
    {
    tidyShowExceptionInConsole( ex );
    }
    oTidyBrowser.bTopLoadBusy = false;
    }
    else
    {
    // Parallel events are placed in a event queue.
    oTidyBrowser.oEventQueue.push( event.originalTarget );
    }

    Тебе просто нужно добавить проверку условия когда oTidyBrowser не определен:
    if( !window.oTidyBrowser )
    {
    // Do nothing
    }
    else if( oTidyBrowser.bTopLoadBusy==false )
    {
    oTidyUtil.tidy.log( ‘<javascript>tidyEndDocumentLoadObserver’ );
    oTidyBrowser.bTopLoadBusy = true;
    try
    {
    // Validate the 1rst request
    oTidyBrowser.bIgnorePageShow = true;
    oTidyBrowser.validateFrame( window.content );
    // oTidyBrowser.validateCache( subject.document, true );

    // Process the events that fired during the 1rst one
    // ex: page with frames.
    var doc = oTidyBrowser.oEventQueue.pop();
    while( doc )
    {
    oTidyBrowser.validateCache( doc, true );
    doc = oTidyBrowser.oEventQueue.pop();
    }
    }
    catch(ex)
    {
    tidyShowExceptionInConsole( ex );
    }
    oTidyBrowser.bTopLoadBusy = false;
    }
    else
    {
    // Parallel events are placed in a event queue.
    oTidyBrowser.oEventQueue.push( event.originalTarget );
    }

  5. Сохрани измененный файл tidyBrowser.js обратно в tidy.zip
  6. Теперь тебе нужно закрыть Firefox, поскольку работающая программа блокирует файл “tidy.jar”
  7. Удали или скопируй в другое место старый “tidy.jar”
  8. Переименуй отредактированный “tidy.zip” в “tidy.jar”
  9. Теперь можешь запустить Firefox

Больше глюк с ошибкой “oTidyBrowser is not defined” тебя не побеспокоит.


0 Комментариев :

Отправить комментарий

Жги!