Post de última hora!!!
Nesses últimos dias andei tendo problemas na hora de adicionar uma folha de scripts (JavaScript) no HTML de um projeto em Asp .Net, coisa que nunca me aconteceu antes. Sempre que eu precisava, eu adicionava a folha da seguinte maneira:
<script src="[Nome do Arquivo].js" type="text/javascript" />
Notem que eu utilizei uma tag de XHTML (adiciono uma barra antes de fechar a tag), e mesmo assim nunca me ocorreu nenhum problema. Até ontem.
Creio que foi até antes, não me lembro bem, mas isso não vem ao caso. O que interessa mesmo é que, de uma hora pra outra, a folha de scripts começou a entrar em conflito com os scripts que o próprio Visual Studio cria. Sendo assim, ao carregar a tela, já surgia o ícone de alerta na barra de status do IE. Ao verificar qual erro era, a informação que era dada dizia o seguinte: "’theForm’ is undefined". O problema consiste no fato de que a tal variável "theForm" (que é gerada pelo Visual Studio) existe e está declarada. De alguma maneira, quando eu adiciono a minha folha de scripts, os erros surgem do nada, e quando eu removo a mesma, os erros desaparecem.
Pesquisando feito um louco na internet, eis que o André, meu superior aqui na Fábrica de Softwares, encontrou a solução: registrar a folha de scripts via código. Solução bem simples, que consiste em adicionar a seguinte linha no evento Page_Load de sua página:
Page.ClientScript.RegisterStartupScript(typeof([qualquer tipo]), "[qualquer nome]", "<script type=’text/javascript’ language=’javascript’ src=’[Nome do Arquivo].js’ />");
Problema resolvido?! Pensamos que sim…
A priori, tudo correu bem, pois a página passou a funcionar corretamente. O pior aconteceu depois, quando os menus pararam de funcionar. Voltamos à mesa de projetos… Nessa hora, percebemos que, ao comentar o código que registrava a folha de scripts na página, os menus voltavam a funcionar. Não sei qual o motivo, mas descobrimos depois que não podíamos ter registrado o script em uma tag de XHTML, deveríamos ter colocado em tags de HTML convencional. Sendo assim, o código passou a ser:
Page.ClientScript.RegisterStartupScript(typeof([qualquer tipo]), "[qualquer nome]", "<script type=’text/javascript’ language=’javascript’ src=’[Nome do Arquivo].js’></script>");
Dizem que o erro ocorria porque, no momento em que a página era criada, a tag não era convertida de XHTML para HTML, se bem que o mais intrigante nisso é que eu já observei tags de XHTML sendo interpretadas normalmente pelo IE, mas pode ser que isso ocorra apenas em tags utilizadas para carregar folhas de estilo (CSS).
Fica a dica: surgiu o erro "’theForm’ is undefined", utilizem o segundo método, para evitar conflitos com o javascript que controla o menu (javascript que também é gerado pelo Visual Studio).
O André encontrou a solução neste endereço: http://www.codeverge.net/ng.asp-net-forum.master_pages_themes_and_navigation_controls/theform-undefined, e eu solucionei o restante por acaso.
Até o próximo post!
Revisão – 06/novembro/2009: Uma alternativa mais prática é utilizar tags HTML convenvionais no próprio código. Evita o uso do RegisterStartupScript. Observei este mesmo erro em páginas escritas em PHP.





