Pergunta

Existe uma maneira de depuração ou rastreamento cada evento JavaScript no Internet Explorer 7?

Eu tenho um bug que impede a rolagem depois do texto-seleção, e não tenho idéia de qual evento ou ação cria o bug. Eu realmente quero ver quais eventos estão sendo acionados quando eu passar o mouse por exemplo.

É muito trabalho para religar a fonte e eu meio que esperava que houvesse algo como um sniffer que me mostra todos os eventos que são acionados.

Foi útil?

Solução

Borkdude disse:

Você pode querer tentar Visual Studio 2008 e sua funcionalidade para depuração de código JavaScript.

Eu tenho sido hacking em torno de manipulação de eventos várias vezes, e na minha opinião, embora depuradores de piso clássicos são úteis para rastrear código é executado longos, eles não são bons em rastrear eventos. Imagine ouvir eventos de movimentação do mouse e quebrar em outro aplicativo em cada evento ... Portanto, neste caso, eu fortemente logging aconselhar.

Se o problema não é específico para o Internet Explorer 7, mas também ocorre em Firefox, em seguida, outra boa maneira de depuração de código JavaScript do Firefox e do Firebug add-on que tem um depurador JavaScript.

E há também Firebug Lite para o Internet Explorer. Eu não tive a chance de usá-lo, mas existe. :-) A desvantagem é que ele não faz um depurador de pleno direito, mas tem um objeto window.console, que é exatamente o que você precisa.

Outras dicas

loop por todos os elementos da página que têm uma função onXYZ definido e, em seguida, adicione o traço-se:

var allElements = document.all; // Is this right? Anyway, you get the idea.

for (var i in allElements) {
    if (typeof allElements[i].onblur == "function") {
        var oldFunc = allElements[i].onblur;
        allElements[i].onblur = function() {
             alert("onblur called");
             oldFunc();
        };
    }
}

Você pode querer tentar Visual Studio 2008 e sua funcionalidade para depuração de código JavaScript.

Se o problema não é específico para o Internet Explorer 7, mas também ocorre em Firefox, em seguida, outra boa maneira de depuração de código JavaScript do Firefox e do Firebug add-on que tem um depurador JavaScript. Então você também pode colocar declarações console.log no código JavaScript que você pode então ver a saída no Console Janela no Firebug, em vez de usar alertas que às vezes estragar a cadeia de eventos.

@ [nickf] -. Tenho certeza document.all é uma extensão específica do Internet Explorer

Você precisa anexar um manipulador de eventos, não há nenhuma maneira de apenas 'relógio' os eventos. Um quadro como jQuery da biblioteca Microsoft Ajax irá facilmente dar-lhe métodos para adicionar os manipuladores de eventos. jQuery é agradável devido à sua estrutura selector.

Então eu uso o Firebug (extensão do Firefox) e colocar em um ponto de interrupção. Acho Firebug é muito mais fácil de configurar e derrubar do que Visual Studio 2008.

É básico, mas você poderia ficar alertas ou chamadas document.write em quando desencadear alguma coisa.

A maneira óbvia seria para configurar alguns alertas para vários eventos algo como:

element.onclick = function () { alert('Click event'); }

Caso contrário, você tem uma opção menos intrusiva de inserir os seus alertas para a algum lugar dom.

Mas, considerar seriamente usando uma biblioteca como jQuery para implementar sua funcionalidade. Muitas das questões cross-browser são resolvidos problemas e você não precisa resolvê-los novamente. Não estou certo exatamente da funcionalidade que você está tentando alcançar, mas há provavelmente uma abundância de rolagem e seleção de plugins para jQuery você poderia usar.

Eu não tenho certeza sobre o código exato (ele tem sido um tempo desde que eu escrevi o código JavaScript complexo), mas você poderia enumerar todos os controles no formulário e anexar um evento que saídas algo quando o evento é acionado.

Você poderia até usar funções anônimas para embrulhar as informações necessárias para a identificação de qual evento foi desencadeante.

Uma coisa que eu gostaria de fazer é criar uma função de ligação em JavaScript (como o que você pode encontrar no protótipo biblioteca) especificamente para eventos, de modo que ele passa o objeto "evento", juntamente com a função vinculado. Agora, se você fosse fazer isso, você pode simplesmente jogar uma chamada traço que será chamado para cada manipulador que o utiliza. E, em seguida, removê-lo quando não é necessário. Um lugar. Fácil.

No entanto, independentemente de como você obter a instrução trace a ser chamado, você ainda quer vê-lo. A melhor estratégia é ter um painel ou janela entregar em separado as chamadas de rastreio. Dojo Toolkit tem um built-in console que roda no Internet Explorer, e há outras coisas semelhantes lá fora. A maneira clássica de fazer isso é criar uma nova janela e document.write a ele.

  • I Recomendamos que fixe uma data-tempo para cada traço. me ajudou consideravelmente no passado.
  • Depuração e alertas normalmente não vai ajudá-lo, porque interrompe o fluxo de eventos normal.

Matt Berseth tem algo que pode ser o tipo de coisa que você está procurando em Aplicações depuração ASP.NET AJAX com o Console de rastreamento AjaxControlToolkit Controle .

É baseado no Yahoo YUI logger, YUI 2:. Logger

A minha sugestão é, usar o Firefox com Firebug e usar o built-in Debug / Trace objetos. Eles são um encanto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top