By: Eduardo Almeida- 13/10/2011
Em: Client side, Ambientes & Linguagens - Comentários: 2 - Leituras: 473
Após fazer algumas abordagens mais simples à alguns conceitos de Orientação a Objeto em Javascript, hoje irei ensinar como trabalhar com namespaces.
Registrar um namespace em javascript, pode ser feito de várias formas possíveis, porém inicialmente irei abordar a forma, que no meu ponto de vista, é a mais fácil e prática.
Para registrar um namespace, basta criar uma variável atribuindo ela à ela mesmo e usando o operador lógico || e logo após {} que definirá a variável como um objeto caso ela esteja indefinida.
//Namespace Carros
var Carros = Carros || {};
Carros.quantidade = 3;
alert(Carros.quantidade); // mostrará na tela o valor 3
Agora que temos o namespace "Carros" criado, vamos fazer uma abordagem um pouco mais complexa ao objeto criando "sub" namespaces. Vejamos o exemplo:
//Namespace HondaCivic
Carros.HondaCivic = {};
Carros.HondaCivic.ano = 2011;
Carros.HondaCivic.cor = "preto";
//Namespace Camaro
Carros.Camaro = {};
Carros.Camaro.ano = 2010;
Carros.Camaro.cor = "amarelo";
//Namespace AudiTT
Carros.AudiTT = {};
Carros.AudiTT.ano = 2010;
Carros.AudiTT.cor = "cinza";
alert(Carros.HondaCivic.cor); // mostrará na tela o valor preto
alert(Carros.HondaCivic.ano); // mostrará na tela o valor 2011
function regNS(ns)
{
var nameSpaces = ns.split(".");
var raiz = window;
for(var i=0; i < nameSpaces.length; i )
{
if(typeof raiz[nameSpaces[i]] == "undefined")
raiz[nameSpaces[i]] = new Object();
raiz = raiz[nameSpaces[i]];
}
}
Para demonstrar o quanto o Javascript é flexível, vou fazer uma demonstração utlizando duas abordagens diferentes de de criar namespaces.
Primeiro, irei criar o namespace Carros conforme no início deste post
//Namespace Carros
var Carros = Carros || {};
Carros.quantidade = 3;
Depois, irei criar o namespace Casa.Garagem utilizando a função regNS que criamos acima
regNS("Casa.Garagem");
No final, podemos simular herança, atribuindo o namespace Carros ao namespace Casa.Garagem.Carros
Casa.Garagem.Carros = Carros; alert(Casa.Garagem.Carros.quantidade); // mostrará na tela o valor 3
By: Álvaro Luiz- 17/7/2011
Em: Client side, Layouts - Comentários: 0 - Leituras: 3853
A Cleids Imobiliária ja era cliente da web2, e após mudar seu targeting, encomendou um novo site.
O site atual deles é o www.cleidsimobiliaria.com.br.
Acompanhe agora, como está indo a criação do layout para o novo site.
Página Inicial

Página interna de listagens em geral

Página de comparação de imóveis

Página de exibição do imóvel

Após a fase do photoshop, exportamos as imagens e começamos a montagem.
Acompanhe na integra como anda montagem do site em http://novo.cleidsimobiliaria.com.br/
By: Álvaro Luiz- 29/6/2011
Em: Client side, Layouts - Comentários: 1 - Leituras: 4742
Ei pessoal, estamos iniciando o processo de desenvolvimento de um novo site para um novo cliente e estamos formatando um novo layout; vamos ao longo do desenvolvimento demonstrando o passo a passo do processo.
Vamos considerar que a logo foi desenvolvida por terceiros a pedido do cliente, apenas estamos trabalhando em cima de uma identidade visual que já existe.
Observem a identidade do cliente, há duas aplicações possíveis:

Primeiro fizemos um esboço grosseiro para ter uma ideia de diagramação:

Depois, partimos para o Photoshop e começamos a layoutar a home do site. Por enquanto, está assim:
Seguindo o pedido do cliente, foram criadas algumas opções de "prova" como fundo levemente texturizado e a área ativa do site em branco, fundo levemente texturizado com o topo do site em branco, fundo levemente texturizado com a parte superior da área ativa do site em branco e fundo e topo 100% branco.
Acompanhe a montagem do site em: http://www.houseimobiliariadf.com.br/
Acompanhe nos prints abaixo:
By: Eduardo Almeida- 29/6/2011
Em: Client side, Segurança - Comentários: 0 - Leituras: 2981
Assim como qualquer software que tenha interface gráfica, nos sites, a maior parte de dados têm como entrada os formulários.
O grande problema, é que na internet, esses formulários estão na maioria das vezes expostos à qualquer um que tenha acesso a rede.
Problemas estes, que não existiriam se todos os desenvolvedores se preocupassem em tratar essas entradas de dados.
Um formulário pode ser explorado por uma pessoa mal intencionada das seguintes formas:
By: Eduardo Almeida- 6/6/2011
Em: Client side, Ambientes & Linguagens - Comentários: 3 - Leituras: 4133
Boa noite pessoal, vamos dar continuidade ao nosso artigo de OO. Vou dar algumas dicas interessantes hoje!
Essa propriedade nos permite adicionar e, em alguns casos modificar, propriedades ou métodos do construtor após sua definição.
Poderemos adicionar propriedades durante a execução. Todo construtor javascript possui a propriedade function.prototype.
function animal()
{
};
// instancia-se o objeto
var cavalo = new animal;
//altera propriedades do construtor em tempo de execução
cavalo.prototype.orelhas = 2;
cavalo.prototype.olhos = 2;
alert(cavalo.olhos);// alerta 2
Esta propriedade não pode ser usada para sobrescrever nada que ja tenho sido definido no construtor. Uma dica é definir tudo no construtor ou fora do construto via function.prototype
Não há ainda suporte a encapsulamento no javascript, porém poderemos simular utilzando o escopo. Observem o exemplo:
function animal()
{
// propriedades públicas
this.orelhas = 2;
this.olhos = 2;
// propriedades privadas
var privada_variavel = "azul";
//método público
this.emitir_som = function(som) {
alert(som);
}
//método privado
var privado_metodo = function() {
alert();
}
};
var cavalo = new animal;
// le propriedade publica do objeto
alert(cavalo.olhos); // alerta -> 2
alert(cavalo.orelhas); // alerta -> 2
// le propriedade privada do objeto
alert(cavalo.privada_variavel); // alerta -> undefined
// invoca método público do objeto
cavalo.emitir_som("innhornhornhorn"); // alerta innhornhornhorn
// invoca método privado do objeto
cavalo.privado_metodo(); // retornará erro
By: Eduardo Almeida- 2/6/2011
Em: Client side, Ambientes & Linguagens - Comentários: 1 - Leituras: 1099
O Javascript é de fato orientado à objetos, porém não possui nativamente diversas características desta prática. Originalmente não há herança, não há classes, não é possível acessar métodos públicos diretamente de fora do objeto, etc.
Porém, tudo isso é possível "emular", na maioria da vezes com a poderosa função prototype do JS.
function animal(){};
Para se instanciar o objeto, usamos o new
var cavalo = new animal;
Caso sua função retorne o objeto
function animal()
{
return this;
};
não é necessário usar o new
var cavalo = animal;
function animal()
{
// propriedade
this.orelhas = 2;
this.olhos = 2;
//método
this.emitir_som = function(som) {
alert(som);
}
};
var cavalo = new animal;
// le propriedade do objeto
alert(cavalo.olhos); // alerta -> 2
alert(cavalo.orelhas); // alerta -> 2
// invoca método emitir_som do objeto
cavalo.emitir_som("innhornhornhorn"); // alerta -> innhornhornhorn
Por enquanto é isso. No próximo falarei de encapsulamento e herança.
By: Eduardo Almeida- 1/6/2011
Em: Client side, Segurança - Comentários: 0 - Leituras: 1091
Nos últimos tempos, um problema recorrente e perigoso em aplicações web conhecido como CSRF (Cross-Site Request Forgery) tem sido muito comentado.
Um ataque de CSRF consiste em inserir requisições em uma sessão já aberta pelo usuário.
O processo básico é: o usuário se autentica em uma aplicação web alvo o usuário utiliza a mesma instância de browser para navegar em um site malévolo o site malévolo manipula o browser para que seja feita uma requisição à aplicação alvo como há uma sessão autenticada aberta para o usuário, a aplicação alvo executa a operação conforme a requisição recebida.
Ou seja, o site malévolo consegue manipular a situação de forma a executar uma ação em nome do usuário. A manipulação do browser citada no item 3 acima pode ser feita de várias formas:
se a aplicação alvo aceitar requisições via método GET, basta incluir uma tag <img > contendo todos os parâmetros necessários à aplicação alvo (qualquer outra tag que faça uma requisição HTTP funcionará da mesma forma);
usando scripts incluídos na página, o que permite a execução de requisições GET ou POST.
Este ataque é extremamente difícil de ser detectado, dado que um identificador de sessão correto e válido será incluído na requisição recebida pela aplicação e a requisição partirá do mesmo browser e endereço IP das requisições legítimas. A aplicação web não como separar a requisição correspondente ao ataque das requisições legítimas.
By: Eduardo Almeida- 1/6/2011
Em: Client side, Frameworks & IDEs - Comentários: 0 - Leituras: 1091
< scri pt type="text/javascript" src="codebase/dhtmlxcommon.js" >< /script >
< sc ript type="text/javascript" >// < ![ CDATA[
var postStr="parametro1=valor1¶metro2=valor2";
dhtmlxAjax.post("receberequisicao.asp", encodeURI(postStr), outputResponse);
function outputResponse(loader)
{
if(loader.xmlDoc.responseText=="sucesso")
{
alert("sucesso");
}
else
{
alert(loader.xmlDoc.responseText);
}
};
// ]] >< /sc ript >
###### receberequisicao.asp
Form("parametro1")->item();
my $parametro1=$Request->Form("parametro2")->item();
## rotina que efetua os procedimentos e retorna sucesso ou erro
print "sucesso";
%>
Desde de 1998 ...
a WEB2 vêm desenvolvendo sites, softwares, implementando ambientes servidores,
prestando consultoria na área de segurança para diversas empresas
como bancos, imobiliárias, agências, cartórios, escritórios de advocacia e até
empresas multi-nacionais. Trabalhamos para criar
experiências intuitivas para os usuários, desenhar interfaces ricas e
elegantes, desenvolver aplicativos úteis, consolidar sites e produtos
que ajudamos a criar, seja desenvolvendo, analisando ou melhorando sua performance. Resumindo, construímos "business" para internet.
Copyright © 2012 WEB2 Soluções LTDA. CNPJ: 14.832.733/0001-05.