Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

JavaScript 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Macapá - AP 
2013 
Elzo Sampaio de Oliveira 
Evaldo Vaz dos Santos 
Luiz Paulo Sena Brito 
Marcos Ribeiro Neto 
Thiago Lima Carvalho 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
JavaScript 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Macapá-AP 
2013 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Trabalho apresentado a professora 
HELAENNE, da disciplina PARADIGMAS 
DE LINGUAGEM, do curso de CIÊNCIA 
DA COMPUTAÇÃO, da turma CC1P66, 
para obtenção de notas referente à NP2. 
 
 
 
 
 
 
 
 
 
 
 
Introdução 
 
História 
JavaScript foi originalmente desenvolvido por Brendan Eich da Netscape 
sob o nome de Mocha, posteriormente teve seu nome mudado para LiveScript 
e por fim JavaScript. LiveScript foi o nome oficial da linguagem quando foi 
lançada pela primeira vez na versão beta do navegador Netscape 2.0 em 
setembro de 1995, mas teve seu nome mudado em um anúncio conjunto com a 
Sun Microssystems em dezembro de 1995 quando foi implementado no 
navegador Netscape versão 2.0B3. 
 
A mudança de nome de LiveScript para JavaScript coincidiu com a 
época em que a Netscape adicionou suporte à tecnologia Java em seu 
navegador (Applets). A escolha final do nome causou confusão dando a 
impressão de que a linguagem foi baseada em java, sendo que tal escolha foi 
caracterizada por muitos como uma estratégia de marketing da Netscape para 
aproveitar a popularidade do recém-lançado Java. 
 
JavaScript rapidamente adquiriu ampla aceitação como linguagem de 
script client-side de páginas web. Como consequência, a Microsoft 
desenvolveu um dialeto compatível com a linguagem de nome JScript para 
evitar problemas de marca registrada. JScript adicionou novos métodos para 
consertar métodos do Javascript relacionados a data que apresentavam 
problemas carece de fontes. JScript foi incluído no Internet Explorer 3.0, 
liberado em Agosto de 1996. Javascript e Jscript são tão similares que os dois 
termos são comumente usados de forma intercambiável. A Microsoft entretanto 
declara muitas características nas quais JScript não conforma com a 
especificação ECMA. 
 
Em novembro de 1996 a Netscape anunciou que tinha submetido 
JavaScript para Ecma internacional como candidato a padrão industrial e o 
trabalho subsequente resultou na versão padronizada chamada ECMAScript. 
 
JavaScript tem se transformado na linguagem de programação mais 
popular da web. Inicialmente, no entanto, muitos profissionais denegriram a 
linguagem pois ela tinha como alvo principal o público leigo. Com o advento do 
Ajax, JavaScript teve sua popularidade de volta e recebeu mais atenção 
profissional. O resultado foi a proliferação de frameworks e bibliotecas, práticas 
de programação melhoradas e o aumento no uso do JavaScript fora do 
ambiente de navegadores, bem como o uso de plataformas de JavaScript 
server-side. 
 
Em janeiro de 2009 o projeto CommonJS foi fundado com o objetivo de 
especificar uma biblioteca padrão para desenvolvimento JavaScript fora do 
navegador. 
http://pt.wikipedia.org/wiki/Brendan_Eich
http://pt.wikipedia.org/wiki/Netscape
Características 
 
As características são comuns a todas as implementações conformantes com o 
ECMAScript. 
 
Imperativa e Estruturada 
JavaScript suporta os elementos de sintaxe de programação estruturada 
da linguagem C (por exemplo, if, while, switch). Uma exceção é a questão do 
escopo: o escopo em blocos ao estilo do C não é suportado, em seu lugar 
JavaScript utiliza escopo a nível de função. JavaScript 1.7, entretanto, suporta 
escopo a nível de bloco através do comando let. Como C, JavaScript faz 
distinção entre expressões e comandos. Uma diferença sintática do C é que a 
quebra de linha termina automaticamente o comando, sendo o ponto-e-vírgula 
opcional ao fim do comando. 
 
 
Dinâmica 
 
Tipagem dinâmica 
Como na maioria das linguages de script, tipos são associados com valores, 
não com variáveis. Por exemplo, a variável x poderia ser associada a um 
número e mais tarde associada a uma string. JavaScript suporta várias formas 
de testar o tipo de um objeto, incluindo ducktyping. 
 
Baseada em objetos 
JavaScript é quase inteiramente baseada em objetos. Objetos 
JavaScript são arrays associativos, aumentados com protótipos. Os nomes da 
propriedade de um objeto são strings. Propriedades e seus valores podem ser 
adicionadas, mudadas, ou deletadas em tempo de execução. A maioria das 
propriedades de um objeto pode ser enumerada usando-se uma estrutura de 
repetição for...in. Javascript possui um pequeno número de objetos padrão da 
linguagem como window e document. 
 
Avaliação em tempo de execução 
JavaScript inclui a função eval que consegue executar em tempo de 
execução comandos da linguagem que estejam escritos em uma string. 
 
Funcional 
 
Funções de primeira classe 
No JavaScript as funções são de primeira classe, isto é, são objetos que 
possuem propriedades e métodos, e podem ser passados como argumentos, 
serem atribuídos a variáveis ou retornados como qualquer outro objeto. 
 
Funções aninhadas 
Funções 'internas' ou 'aninhadas' são funções definidas dentro de outras 
funções. São criadas cada vez que a função que as contém (externa) é 
invocada. Além disso, o escopo da função externa, incluindo constantes, 
variáveis locais e valores de argumento, se transforma parte do estado interno 
de cada objeto criado a partir da função interna, mesmo depois que a execução 
da função interna é concluída. 
 
Fechamentos 
JavaScript permite que funções aninhadas sejam criadas com o escopo 
léxico no momento de sua definição e possui o operador () para invocá-las em 
outro momento. Essa combinação de código que pode ser executado fora do 
escopo no qual foi definido, com seu próprio escopo durante a execução, é 
denominada, dentro da ciência da computação, fechamento. 
 
Baseada em Protótipos 
Protótipos 
JavaScript usa protótipos em vez de classes para o mecanismo herança. 
É possível simular muitas características de orientação a objetos baseada em 
classes com protótipos. 
 
Funções e métodos 
Diferente de muitas linguagens orientadas a objetos, não há distinção 
entre a definição de uma função e a definição de um método no JavaScript. A 
distinção ocorre durante a chamada da função; a função pode ser chamada 
como um método. Quando uma função é chamada como método de um objeto, 
a keyword this da função é associada àquele objeto via tal invocação. 
 
Uso em páginas Web 
O uso primário de JavaScript é escrever funções que são embarcadas 
ou incluídas em páginas HTML e que interagem com o Modelo de Objeto de 
Documentos (DOM) da página. Alguns exemplos deste uso são: 
 abrir uma nova janela com controle programático sobre seu tamanho, 
posição e atributos; 
 validar valores de um formulário para garantir que são aceitáveis antes 
de serem enviados ao servidor; 
 mudar imagens à medida que o mouse se movimenta sob elas. 
 
Pelo fato do código JavaScript rodar localmente no navegador do 
usuário, e não em um servidor remoto, o navegador pode responder a tais 
ações rapidamente, fazendo uma aplicação mais responsiva. Além disso, o 
código JavaScript pode detectar ações de usuário que o HTML sozinho não 
pode, tais como teclas pressionadas individualmente. Aplicações como Gmail 
tomam vantagem disso: muito da lógica da interface do usuário é escrita em 
JavaScript, e o JavaScript envia requisições de informação, tais como o 
conteúdo de um correio eletrônico, para o servidor. A tendência mais ampla de 
programação em Ajax explora de maneira similar este ponto forte. 
 
Uma JavaScript engine (também conhecida como interpretador 
JavaScript ou uma implementação JavaScript) interpreta código fonte 
JavaScript e o executa de forma adequada. A primeira implementação 
JavaScript foi criadapor Brendan Eich na Netscape Communications 
Corporation, para o Navegador Netscape. A implementação, nomeada 
SpiderMonkey, é implementada em C e vem sendo atualizada para conformar 
com a edição 3 do ECMA-262. A implementação Rhino, criada primariamente 
por Norris Boyd é uma implementação de JavaScript em Java. Rhino, como 
SpiderMonkey, é conformante com a terceira edição do ECMA-262. 
 
Por ser o JavaScript a única linguagem que a maioria dos navegadores 
populares suportam, tem se tornado uma linguagem alvo para muitos 
frameworks em outras linguagens, a despeito do fato de não ter sido planejado 
para tal. Não obstante as limitações de desempenho inerente à sua natureza 
dinâmica, a crescente velocidade das implementações JavaScript tem feito da 
mesma uma prática linguagem intermediária. 
 
 
 
Compatibilidade 
 
Já que JavaScript roda em ambientes variáveis, uma parte importante do 
teste e depuração de seu código consiste na verificação de compatibilidade 
entre navegadores. 
 
As interfaces DOM para a manipulação de páginas web não são parte 
do padrão ECMA, ou do próprio JavaScript. Oficialmente, são definidas por um 
esforço de padronização da W3C; na prática, implementações de navegadores 
diferem do padrão de uma para as outras, e nem todos navegadores executam 
JavaScript. 
 
Para lidar com essas diferenças, programadores JavaSCript com 
frequência tentam escrever códigos que conformam com o padrão comum a 
maioria dos navegadores; não sendo possível isso, tentam escrever de 
maneira ad-hoc um código que verifique a presença de certos recursos e que 
se comporte de maneira adequada caso tais recursos não estejam disponíveis. 
Em alguns casos, dois navegadores podem ambos implementarem uma 
funcionalidade com comportamentos diferentes, e programadores podem achar 
prático detectar qual navegador está rodando e mudar o comportamento de 
seus scripts para se adequar a isso. Programadores podem também usar 
bibliotecas ou ferramentas que abstraem tais diferenças entre navegadores. 
 
Além disso, scripts podem não funcionar para alguns usuários. Por 
exemplo, um usuário pode: 
 Usar um navegador antigo ou raro com suporte DOM incompleto ou 
incomum. 
 Usar um navegador de um PDA ou telefone móvel que não está apto a 
executar JavaScript. 
 Ter a execução do JavaScript desabilitada por normas de segurança. 
 
Para suportar tais usuários, programadores web tentam criar páginas 
que sejam robustas a agentes que não suportem o JavaScript da página. Em 
particular, uma página deve funcionar a despeito das funcionalidades extras 
que um JavaScript provê. Uma abordagem alternativa que muitos acham 
preferível é a página se desenvolvida por primeiro a partir de tecnologias 
básicas que funcionem em todos os navegadores, e então aprimorá-la para os 
usuários que possuam JavaScript. 
 
 
 
Acessibilidade 
 
Assumindo que o usuário não tenha desabilitado sua execução, pode-se 
utilizar JavaScript do lado cliente para melhorar a experiência de um usuário 
com deficiência física ou visual. 
 
Leitores de tela utilizados por pessoas cegas ou com visão parcial 
podem detectar a presença de JavaScript e dessa forma acessar e ler o DOM 
da página depois que seus scripts foram executados. Nestes casos 
recomenda-se que o HTML seja o mais conciso, navegável e rico 
semanticamente possível, tendo a página scripts ou não. Não se recomenda 
que o código JavaScript de uma página seja totalmente dependente do eventos 
provenientes do mouse já que usuários que não conseguem ou optam por não 
usar o mouse não estarão aptos a colher os benefícios de tal código. Da 
mesma forma, embora hyperlinks e webforms possam ser navegados e 
operados do teclado, JavaScript voltado para acessibilidade não deve requerer 
um teclado para acessar tais eventos. JavaScript conta com eventos 
independentes do dispositivo de usuário tais como onfocus e onchange que 
são mais recomendados na maioria dos casos. 
 
Não se recomenda utilizar JavaScript de um jeito que seja confuso ou 
desorientador para qualquer usuário da internet. Por exemplo, usar JavaScript 
para alterar ou desabilitar a funcionalidade normal de um navegador, tal como 
mudar a forma com que o botão direito ou o evento de atualização funcionam, 
deve ser evitado. Da mesma forma, eventos de interrupção que o usuário pode 
não estar ciente reduzem a sensação de controle do usuário, assim como 
scripts inesperados que mudam o conteúdo da página. 
 
Frequentemente o processo de fazer páginas web complexas tão 
acessíveis quanto possível se transforma em um problema não trivial, onde 
certas decisões são assunto de debate e opinião. Entretanto, tecnologias 
assistivas estão constantemente evoluindo e novas recomendações e 
informações relevantes vem sendo continuamente publicadas na web. 
 
 
Segurança 
 
JavaScript e o DOM representam uma potencialidade para 
programadores maliciosos escreverem scripts para rodarem em um cliente via 
web. Navegadores são projetados para conter este risco de duas maneiras. A 
primeira é que scripts são rodados em uma sandbox na qual só podem 
executar ações relacionadas à internet, não tarefas de programação de 
propósito geral como criar arquivos. A segunda é que scripts são limitados pela 
regra da mesma origem: scripts de um web site não têm acesso a informações 
como nomes de usuário, senhas ou cookies enviados de outro site. A maioria 
dos bugs em JavaScript relacionados à segurança são brechas de uma das 
regras. 
 
Vulnerabilidades inter-sites 
Um problema comum relacionado à segurança é a escrita de scripts 
inter-sites, ou XSS, uma violação da regra da mesma origem. Tais 
vulnerabilidades ocorrem quando um atacante está apto a causar em um site 
alvo, como um site de banco, a inclusão de um script malicioso na página web 
apresentada à vítima. O script neste exemplo pode então acessar a aplicação 
do banco com privilégios da vítima, potencialmente revelando informações 
secretas ou transferindo dinheiro sem a autorização da vítima. 
 
Alguns navegadores incluem proteção parcial contra ataques XSS 
refletidos, no qual o atacante fornece uma URL incluindo o script malicioso. No 
entanto, mesmo usuários destes sites estão vulneráveis a outros ataques XSS, 
como aqueles onde o código malicioso é guardado em um banco de dados. 
Apenas o correto desenho de aplicações web no servidor pode prevenir 
inteiramente ataques XSS. 
 
Vulnerabilidades XSS também podem ocorrer por causa de erros de 
implementação por parte de programadores de navegadores. 
 
Outra vulnerabilidade inter-sites é a falsificação de requisição inter-sites 
ou CSRF. No CSRF, o código no site de um atacante faz com que o navegador 
da vítima tome ações não desejadas pelo usuário em um site alvo (como 
transferência de dinheiro em um banco). Ela funciona porque, se o site alvo 
conta apenas com cookies para autenticar requisições, então requisições 
iniciadas pelo código no site do atacante levarão as mesmas credenciais 
legítimas de login que as requisições iniciadas pelo usuário. Em geral a solução 
para CSRF é requerer um valor de autenticação em um campo webform 
escondido, e não somente nos cookies, para autenticar qualquer requisição 
que possa ter efeitos duradouros. Verificar o cabeçalho do HTTP Referrer 
também pode ajudar. 
 
"Sequestro JavaScript" é um tipo de ataque CSRF no qual uma tag 
 no site do atacante explora uma página no lado da vítima que retorna 
informação privada tal como JSON ou JavaScript. Soluções possíveis incluem 
requerer um token de autenticação nos parâmetros POST e GET para qualquer 
resposta que retorne um JSON privado (mesmo que não tenha efeitos 
colaterais); utilizar POST e nunca GET para requisições que retornem um 
JSON privado; e modificar a resposta de forma que não possa ser usada via 
uma tag (através, por exemplo, de um wrapping de um JSON em um 
comentárioJavaScript). 
 
 
 
 
Reflexão Sobre a Prática 
 
Acadêmico: Elzo Sampaio de Oliveira 
 
Acadêmico: Evaldo Vaz dos Santos 
 
Acadêmico: Luiz Paulo Sena Brito 
 
Acadêmico: Marcos Ribeiro Neto 
Entendi que o JavaScript são os scripts embutidos no código HTML que 
permite todo o dinamismo das páginas web e a interatividade com o usuário. 
Por ser o JavaScript uma linguagem compatível com a maioria dos 
navegadores modernos, é a linguagem de programação do lado do cliente mais 
utilizada entre os programadores. 
 
Acadêmico: Thiago Lima Carvalho 
Em suma, o Javascript é uma linguagem de scripts orientada a objetos 
que reside dentro das paginas HTML, escreve funções no HTML, trazendo uma 
interatividade com o usuário que não seria possível ser realizada com o código 
de HTML simples, é uma linguagem que é executada com o browser ou seja 
não se faz necessário a compilação de seu código. 
 
Conclusão 
 
Bibliografia 
 
http://www.lem.ep.usp.br/Pef411/~Mario%20Eguti/PEF411%20JAVA.htm 
http://www.infoescola.com/informatica/javascript/ 
http://penta.ufrgs.br/pesquisa/joice/cap4.html 
books.google.com.br/books?isbn=8536304758 
 
Livro: Use a cabeça! JavaScript 
 Autor: Michael Morrison

Mais conteúdos dessa disciplina