Arquivo da tag: Javascript

Detectando arquivos Javascript duplicados na sua página, com Javascript!

JS
Nem vou comentar as possíveis razões do supracitado acontecimento, mas o fato é que, dependendo do projeto, você vai encontrar isso.

Os problemas? Muitos, a começar por funções chamadas duas ou mais vezes, isso quando eventos não são indevidamente inativados. Ok, chega de reclamar.

Após alguma pesquisa, consegue chegar a um bom código que consegue detectar arquivos js registrados na página. O mais bacana dele é que o código também detecta chamadas Ajax, ou seja, se algum bloco HTML for inserido dinamicamente, o código vai avisar!

O código:

// code to trigger ajax calls
(function () {
	var proxied = window.XMLHttpRequest.prototype.send;
	window.XMLHttpRequest.prototype.send = function () {
		console.log(arguments);
		//Here is where you can add any code to process the request. 
		//If you want to pass the Ajax request object, pass the 'pointer' below
		var pointer = this
		var intervalId = window.setInterval(function () {
			if (pointer.readyState != 4) {
				return;
			}
			// pointer.responseText <-- here is the response text
			checkDuplicatedScript();
			clearInterval(intervalId);
 
		}, 1);//I found a delay of 1 to be sufficient, modify it as you need.
		return proxied.apply(this, [].slice.call(arguments));
	};
})();
 
// check duplicated registered js files
function checkDuplicatedScript() {
	var arr = Array.prototype.slice.call(document.getElementsByTagName("script"), 0);
	var sorted_arr = arr.sort();
 
	var results = [];
	for (var i = 0; i < arr.length - 1; i++) {
		if (sorted_arr[i + 1].src == sorted_arr[i].src) {
			results.push(sorted_arr[i]);
		}
	}
 
	if (results.length > 0) {
		var message = 'These files as duplicated: ';
 
		results.forEach(function(element) {
			message += element.src + ',';
		}, this);
		alert(message);
	}
	else {
		console.log('Nothing here...., but the total was: ' +  sorted_arr.length);
	}
}
 
// for the first time
checkDuplicatedScript();

Como não poderia ser diferente, boa parte do código foi extraída do stackoverflow, com algumas alterações:

http://stackoverflow.com/questions/10783463/javascript-detect-ajax-requests
http://stackoverflow.com/questions/840781/easiest-way-to-find-duplicate-values-in-a-javascript-array

E também está no git!

https://github.com/Tomamais/detectDuplicatedJsFiles

JavaScript – Desativando o menu de contexto (botão direito) do navegador

Se tem uma coisa que esse mundo da tecnologia tem de sobra são surpresas. Nunca sabemos quando precisaremos de um determinado recurso.

Em uma necessidade atual, uma das páginas de um website precisava impedir que os usuários acionassem o botão direito no mouse, aquele que ativa um menu com várias opções no navegador. Pois bem, na busca de algumas soluções na Web, a que encontrei e funcionou melhor foi o JavaScript abaixo, que deve ser colocado em algum lugar da página (preferencialmente, mas não obrigatoriamente, no cabeçalho desta):

<script type="text/javascript"><!--
var message="";
function clickIE() {if (document.all) {(message);return false;}}
function clickNS(e) {if 
(document.layers||(document.getElementById&&!document.all)) {
if (e.which==2||e.which==3) {(message);return false;}}}
if (document.layers) 
{document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;}
else{document.onmouseup=clickNS;document.oncontextmenu=clickIE;}
document.oncontextmenu=new Function("return false")
//--></script>

O código funcionou bem na maioria dos navegadores, já que no código várias considerações sobre estes são feitas. É bom lembrar que este tipo de artimanha funciona bem com usuários básicos. Usuários avançados sabem driblar esse tipo de proteção com algumas ferramentas, plugins, etc.

De qualquer forma, é um “ás na manga” em momentos de aperto.

Bom proveito!

Referências

http://www.htmlhelpcentral.com/messageboard/showthread.php?t=12261

Web – Obtendo o valor de uma QueryString com JavaScript

Mais uma tarefa comum em aplicações Web que acabamos por precisar fazer também no JavaScript.

Obter o valor de uma queryString é trivial em qualquer linguagem server side (ASP, ColdFusion, PHP, etc), mas no JavaScript, não.

Indo atrás de algumas funçôes (existem várias por aí), achei uma que atendeu muito bem:

function queryString(value) 
{
	path = window.location.search.substring(1);
	queryStringValues = path.split("&");
	for (i=0; i < queryStringValues.length; i++) 
	{
		queryStringValue = queryStringValues[i].split("=");
		if (queryStringValue[0] == value) 
		{
			return queryStringValue[1];
		}
	}
}
 
// exemplo de chamada
function getQueryStringTest()
{
	// obtém a queryString do email
	var email = queryString("email");
	if (email != null)
	{
		alert('Valor da queryString: ' + email);
	}
	else
	{
		alert('Ops! Não tem nada aqui');
	}
}

Junto segue uma função de teste para a chamada. Para ver funcionando, basta acessar a página que contém o script no seu navegador com a queryString com o valor do email. Segue abaixo um exemplo funcional:

Sem queryString

http://www.tomasvasquez.com.br/downloads/queryStringTest.htm

Com queryString

http://www.tomasvasquez.com.br/downloads/queryStringTest.htm?email=webmaster@tomasvasquez.com.br

Referências

http://ilovethecode.com/Javascript/Javascript-Tutorials-How_To-Easy/Get_Query_String_Using_Javascript.shtml

Web – Rodando Flash sem o Flash!!

A notícia remete a uma façanha e tanto. Escrito por Chris Smoak, o Smokescreen é um “Flash player escrito em JavaScript”, que pega os objetos em Flash e os converte em JavaScript em tempo real.

Bom, o resultado disso, apesar de parecer pouco significativo, simplesmente dá a qualquer browser a façanha de poder executar animações em Flash sem precisar do famoso Flash Player instalado.

Pode parecer pouca coisa, mas se esta façanha tomar forma, o sonho de independência da plataforma Flash por parte de muitos fabricantes do mercado será realidade, uma vez que é preciso suportar apenas o padrão javascritp, o que qualquer engine de browser já faz. O impacto que a iniciativa traz é descomunal para o desenvolvimento Web e plataformas móveis, que sofrem por não suportar o padrão ou não tê-lo por parte da Adobe.

O Tablet iPad, da Apple é o caso mais recente de “não suporte” oficial e mais importante, não interesse. A Apple já disse não ter pretensões de suportar o Flash em seu novo produto.

Exemplos de animações feitas em Flash e transformadas pelo Smokescreen podem ser vistas no site oficial do autor:

http://smokescreen.us/

O resultado já é bem interessante, apesar de inicial. No browser Chrome, da Google, o desempenho é favorecido pelo motor de javascript.