Home > Flex > [Javascript] Desabilitando teclas de função (F1, F2…)
Compartilhar

[Javascript] Desabilitando teclas de função (F1, F2…)

March 25th, 2009 Ved

Saudações meus caros leitores,

Há muito que estou com vontade de dar a atenção que blog (e vcs) merece, mas a vida anda atribulada e por isso não tenho encontrado tempo.

Hoje eu precisei desabilitar a ação padrão de todas as teclas de função (F1 a F12) ao utilizar um browser para acessar uma app Flex. A necessidade se deve ao fato do sistema atual ter funções específicas associadas a estas teclas. No novo sistema (o que estamos desenvolvendo em Flex) essas funções devem permanecer e associadas as mesmas teclas. Isso é mandatório e a empresa não pode abrir mão.

Assim, lá fui eu procurar soluções prontas em Javascript. Após não encontrar nada de muito consistente, decidi escrever minha própria solução, utilizando fragmentos de diversas dicas isoladas. Para facilitar as coisas, estou usando a JQuery para gerenciar eventos e me informar sobre qual o browser atual.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
 
	// Captura o evento da tecla pressionada e associa à função grabKey
	$(document).keydown(grabKey); // Para IE, Chrome e FF
	$(document).keypress(grabKey); // Para FF, Safari e Opera
 
	function grabKey(event){
 
	  var e = (window.event) ? window.event : event; // Essecial para funcionar no IE
 
	  if(e.keyCode >= 112 && e.keyCode < = 123){ // Verifica se a tecla pressionada é F1 a F12
 
	  	if ($.browser.msie) {
		  	e.returnValue = false;  // Previne o comportamento padrão no IE
			e.cancelBubble = true;  // Previne o comportamento padrão no IE
			e.keyCode = 0;   // Previne o comportamento padrão no IE
			document.onhelp=new Function("return false"); // Previne a abertura do help no IE
			window.onhelp=new Function("return false"); // Previne a abertura do help no IE
		} else {
			e.stopPropagation(); // Previne o comportamento padrão nos browsers bons
			e.preventDefault(); // Previne o comportamento padrão nos browsers bons
	  	}
	  }
	}
</script>
</script>

O script functionou corretamente nos seguintes browsers:

  • IE 6+
  • FF 3 Windows
  • FF 3 Mac
  • Chrome
  • Safari 4 Windows
  • Safari 4 Mac
  • Opera 9

Basta usar o código acima no seu index.template.html encontrado na pasta html-template do seu projeto Flex. Este arquivo é utilizado para geração do html container de sua app Flex.

Agora, basta chamar suas funções AS3 a partir do Javascript, utilizando Flex AJAX Bridge ou então capturando o ato de pressionar a tecla diretamente pelo Flex.

Um abraço,

Ved