Erro de JavaScript "h is not a constructor" em ASP.NET AJAX

Esta mensagem de erro pode ter várias causas. Vou falar de uma delas, que descobri enquanto lia os fóruns ASP.net (Bug : Setting ScriptPath). É o tipo de erro que leva qualquer um a ficar doido.

Informação sobre o ScriptManager

O controlo ScriptManager tem uma propriedade chamada ScriptPath que permite especificar um caminho para os ficheiros JavaScript do ASP.NET AJAX assim como para outros scripts.

Usando esta funcionalidade, os ficheiros ASP.NET AJAX vão ser carregados directamente do sistema de ficheiros ao invés do normal, que é serem carregados através de um HTTP handler.

Não só isto é prático para fazer debug, como também é necessário para situações específicas onde o handler HTTP esteja a dar problemas.

Com isto em mente, a Microsoft incluiu os ficheiros JavaScript para o ASP.NET AJAX para poderem ser copiados para a pasta desejada.

Conforme a vossa instalação, estes ficheiros podem ser encontrados em:

C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025\MicrosoftAjaxLibrary\System.Web.Extensions\1.0.61025.0\Globalization

Vão encontrar tanto versões debug como release para cada ficheiro JavaScript.

O problema

Se usarem a versão release do ficheiro MicrosoftAjaxTimer.js vão encontrar este erro quando também usarem um timer na página.

Nesses casos, vão aparecer erros JavaScript "h is not a constructor" e vão começar a falhar outros scripts.

O problema está no ficheiro MicrosoftAjaxTimer.js, onde aparentemente a minificação não correu bem e um ponto e vírgula (;) foi deixado de fora.

Para corrigir isto, abram o ficheiro e procurem pela seguinte string:

Sys.UI._Timer.registerClass("Sys.UI._Timer",Sys.UI.Control)if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();

Falta um ponto e vírgula (;) antes do if. Adicionem-no, guardem o ficheiro e dêem-se por contentes que alguém já encontrou o erro por vocês (não eu, mas a pessoa original nos fóruns)!

Recursos

Nuno Freitas
Publicado por Nuno Freitas em 25 novembro, 2013

Artigos relacionados