Ben Vinegar Anton Kovalyov

Documentos relacionados
JavaScript. de Alto Desempenho. Nicholas C. Zakas. Novatec

Construindo Aplicações Node com MongoDB e Backbone Mike Wilson

Objective-C Fundamental Christopher K. Fairbairn Johannes Fahrenkrug Collin Ruffenach

Sumário. Parte I Elementos essenciais Sobre o autor Sobre o revisor técnico Prefácio... 14

jquery Mobile Desenvolva aplicações web para dispositivos móveis com HTML5, CSS3, AJAX, jquery e jquery UI 2a Edição Maurício Samy Silva Novatec

jquery Mobile Desenvolva aplicações web para dispositivos móveis com HTML5, CSS3, AJAX, jquery e jquery UI Maurício Samy Silva Novatec

Web Interativa com Ajax e PHP

André Gugliotti. Novatec

John Resig Bear Bibeault

Jonathan Weber e a equipe da LunaMetrics

Matheus Marabesi Michael Douglas

William Pereira Alves

Indira Knight. Novatec

Ryan Mitchell. Novatec

Maurício Samy Silva. Novatec

Ademir C. Gabardo. Novatec

Miguel Grinberg. Novatec

AngularJS. Uma abordagem prática e objetiva. Michael Henrique R. Pereira. Novatec

Introdução ao GitHub Peter Bell e Brent Beer

WordPress 3 Básico Stephanie Leary

Aditya Y. Bhargava. Novatec

Raspberry Pi Manual do Usuário

Shyam Seshadri & Brad Green

Introdução às. Expressões Regulares. Michael Fitzgerald. Novatec

Luiz Eduardo Borges. Novatec

Adrian Pruteanu. Novatec

Chris Binnie. Novatec

Edécio Fernando Iepsen

Karl Matthias Sean P. Kane

Ademir Cristiano Gabardo. Novatec

Hélio Engholm Jr. Novatec

Aravind Shenoy Anirudh Prabhu

Sumário. Prefácio Capítulo 1 Orientação e primeiras etapas Capítulo 2 Dados: trabalhando com texto e números... 40

Criando Relatórios com PHP Pablo Dall Oglio

Osvaldo Santana Thiago Galesi

Novatec Editora Ltda

Desenvolvendo Websites com PHP

Novatec Editora Ltda

Guia Mangá. Álgebra Linear. Shin Takahashi, Iroha Inoue e Trend-Pro Co., Ltd. novatec

Primeiros Passos com o Netduino

Jessey Bullock Jeff T. Parker

4ª Edição Revisada e Ampliada Aurelio Marinho Jargas

Arduino Básico Michael McRoberts

Ademir Cristiano Gabardo. Novatec

Blender 3D jogos e animações interativas Allan Brito

Primeiros Passos com Sensores Kimmo Karvinen Tero Karvinen

Allan Liska e Timothy Gallo. Novatec

Shelley Powers. Novatec

PHP. Programando com Orientação a Objetos. Pablo Dall Oglio. Novatec

Sérgio de Oliveira. Novatec

desenvolva aplicações web profissionais com uso dos poderosos recursos de estilização das css3 Maurício Samy Silva

Novatec Editora Ltda

Pedro Monteiro da Silva Eleutério Marcio Pereira Machado. Novatec

Adriano Pataro. Novatec

Keith Wood. Apresentação de Dave Methvin. Novatec

Maurício Samy Silva. Novatec

Análise de Regressão

Benjamin Bengfort Jenny Kim

Allen B. Downey. Novatec

Robson Santos da Silva

Expressões Regulares Cookbook Jan Goyvaerts Steven Levithan

Desenvolvimento de Grandes Aplicações Web

4ª Edição Pablo Dall Oglio

Primeiros Passos com o Arduino

Arduino Básico. 2ª edição. Michael McRoberts. Novatec

Jody Culkin e Eric Hagan

Programando para. iphone e ipad. Aprenda a construir aplicativos para o ios. André Milani. Novatec

Guia Prático Richard E. Silverman

3ª Edição Nilo Ney Coutinho Menezes

Editor: Rubens Prates PY Editoração eletrônica: Carolina Kuwabata Revisão gramatical: Patrizia Zagni Capa: Edinei Gonçalves/Carolina Kuwabata

Métricas. Como melhorar os principais resultados de sua empresa. Martin Klubeck. Novatec

Ademir Ribeiro dos Passos

Simon Holmes. Novatec

2ª Edição Cláudio Torres

Guia Mangá Circuitos Eletrônicos

Flex 4 Avançado Shashank Tiwari Elad Elrom

Jonathan Stark Brian Jepson

Rodrigo de Barros Paes

Semmy Purewal. Novatec

Kenneth Reitz Tanya Schlusser

Guia Mangá. Microprocessadores. Michio Shibuya, Takashi Tonagi e Office Sawa. Novatec

Editor: Rubens Prates Revisão gramatical: Marta Almeida de Sá Editoração eletrônica: Carolina Kuwabata Assistente editorial: Priscila A.

Roberto Cohen. Novatec

Murillo Lo Visco. Novatec

Google Analytics Justin Cutroni

Guia Mangá FISIOLOGIA. Etsuro Tanaka, Keiko Koyama, e Becom Co., Ltd. Novatec

Segurança em Redes sem Fio

Pramod J. Sadalage Martin Fowler

Zend. Framework. Componentes Poderosos para PHP. Flávio Gomes da Silva Lisboa. Novatec

Brandon Rhodes John Goerzen

Guia Mangá Motores elétricos

Julia Elman e Mark Lavin. Novatec

Chris Goward. Novatec

Roni Antônio Mendes. Novatec

marketing ágil Utilização de Metodologias Ágeis em Projetos de Marketing Michelle Accardi-Petersen Novatec

Josh Pauli Revisão técnica Scott White. Novatec

Daniel Marcos Cunha Pereira

Guia Mangá Circuitos Eletrônicos

Vinícius Manhães Teles prefácio de Kent Beck colaborações especiais de Kent Beck e Robert Mee

Transcrição:

Ben Vinegar Anton Kovalyov Novatec

Original English language edition published by Manning Publications Co., Sound View CT.#3B, Greenwich, CT 06830 USA. Copyright 2013 by Manning Publications. Portuguese-language edition for Brazil copyright 2013 by Novatec Editora. All rights reserved. Edição original em inglês publicada pela Manning Publications Co., Sound View CT.#3B, Greenwich, CT 06830 USA. Copyright 2013 pela Manning Publications. Edição em português para o Brasil copyright 2013 pela Novatec Editora. Todos os direitos reservados. Novatec Editora Ltda. 2013. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Tradução: Marcos José Pinto Revisão técnica: Aurelio Jargas Revisão gramatical: Marta Almeida de Sá Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-372-7 Histórico de impressões: Agosto/2013 Primeira edição Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 São Paulo, SP Brasil Tel.: +55 11 2959-6529 Fax: +55 11 2950-8869 E-mail: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec MP20130801

Sumário Introdução... 11 Prefácio...13 Agradecimentos...15 Sobre este livro... 17 Sobre os autores... 21 Sobre a ilustração da capa...22 Capítulo 1 Introdução ao JavaScript remoto...23 1.1 Definição de JavaScript remoto...24 1.2 Os muitos empregos do JavaScript remoto...28 1.2.1 Widgets incorporados...29 1.2.2 Análise e métrica de tráfego...32 1.2.3 Wrappers de API de web services...35 1.3 Desenvolvimento de um widget básico...40 1.3.1 Geração de JavaScript em servidor...42 1.3.2 Distribuição de widgets como iframes...45 1.4 Desafios do desenvolvimento de sistemas remotos...47 1.4.1 Contexto desconhecido...47 1.4.2 Ambiente compartilhado...48 1.4.3 Restrições de navegadores...50 1.5 Resumo... 51 Capítulo 2 Distribuição e carregamento do seu aplicativo...52 2.1 Configuração do seu ambiente para desenvolvimento de código remoto.54 2.1.1 Página de testes do provedor de conteúdo...54 2.1.2 Servidor web...55 2.1.3 Simulação de domínios múltiplos...56 2.2 Carregamento do script inicial...58 2.2.1 Inclusão de script com bloqueio...59 2.2.2 Scripts sem bloqueio com async e defer... 61 2.2.3 Inserção dinâmica de script...64 5

6 JavaScript Remoto 2.3 Arquivo de script inicial... 66 2.3.1 Apelidos para window e undefined...67 2.3.2 Fluxo básico de aplicativo... 68 2.4 Carregamento de arquivos adicionais...69 2.4.1 Arquivos JavaScript...70 2.4.2 Bibliotecas...73 2.5 Passagem de argumentos aos scripts...76 2.5.1 Utilização da query string...76 2.5.2 Utilização do identificador de fragmento...80 2.5.3 Utilização de atributos de dados personalizados... 81 2.5.4 Utilização de variáveis globais...83 2.6. Busca de dados do aplicativo... 86 2.7 Resumo... 88 Capítulo 3 Apresentação de HTML e CSS...90 3.1 Geração de HTML... 91 3.1.1 Utilização do document.write...92 3.1.2 Anexar em um local conhecido...93 3.1.3 Anexação de widgets múltiplos...95 3.1.4 Separação dos alvos de apresentação...98 3.2 Aplicação de estilo ao HTML...100 3.2.1 Estilos em linha (inline)...100 3.2.2 Carregamento de arquivos CSS...101 3.2.3 Incorporação de CSS no JavaScript...106 3.3 HTML e CSS defensivos...109 3.3.1 Namespaces...110 3.3.2 Especificidades do CSS...112 3.3.3 Definição redundante de CSS...115 3.4 Incorporação de conteúdo em iframes...119 3.4.1 Iframes src-less...121 3.4.2 Iframes externos... 123 3.4.3 Herança de estilos... 125 3.4.4 Quando não usar os iframes?... 130 3.5 Resumo... 132 Capítulo 4 Comunicação com o servidor...134 4.1 O AJAX e a política de mesma origem dos navegadores... 135 4.1.1 Regras de determinação de mesma origem... 138 4.1.2 Política de mesma origem e carregamento de scripts... 139

Sumário 7 4.2 JSON com padding (JSONP)...141 4.2.1 Carregamento de JSON por meio de elementos de scripts...141 4.2.2 Funções de callback dinâmicas... 143 4.2.3 Limitações e problemas de segurança...147 4.3 Proxies de subdomínios... 149 4.3.1 Alteração da origem do documento com document.domain...151 4.3.2 Mensagens entre origens por meio de proxies de subdomínio... 153 4.3.3 Combinação de proxies de subdomínio com JSONP... 157 4.3.4 O Internet Explorer e os proxies de subdomínio... 162 4.3.5 Implicações de segurança... 163 4.4 Compartilhamento de recursos entre origens (CORS)... 165 4.4.1 Envio de solicitações HTTP simples... 165 4.4.2 Transferência de cookies com CORS... 169 4.4.3 Envio de preflight request... 169 4.4.4 Compatibilidade de navegadores...171 4.5 Resumo... 172 Capítulo 5 Mensagens em iframes entre domínios...173 5.1 API window.postmessage do HTML5...174 5.1.1 Envio de mensagens com window.postmessage... 176 5.1.2 Recebimento de mensagens enviadas a uma janela... 178 5.1.3 Compatibilidade dos navegadores... 180 5.2 Técnicas de reversão (fallback)... 182 5.2.1 Envio de mensagens com window.name... 183 5.2.2 Envio de mensagens com identificador de fragmento de URL... 188 5.2.3 Envio de mensagens com Flash... 192 5.3 Envio simples de mensagens entre domínios com easyxdm... 196 5.3.1 Carregamento e início da easyxdm... 197 5.3.2 Envio de mensagens simples com eaxyxdm.socket... 199 5.3.3 Definição de interfaces JSON-RPC com easyxdm.rpc... 201 5.4 Resumo...207 Capítulo 6 Autenticação e sessões...209 6.1 Cookies remotos... 210 6.1.1 Definição e leitura de sessões...211 6.1.2 Desativação de cookies remotos... 213 6.1.3 Internet Explorer e headers P3P... 215 6.1.4 Como detectar quando os cookies não estão disponíveis... 218

8 JavaScript Remoto 6.2 Como gravar cookies remotos... 221 6.2.1 Via janelas dedicadas...222 6.2.2 Solução com iframe (somente para Safari)...226 6.2.3 Sessões de página única para o Chrome e o Firefox...229 6.3 Como proteger as sessões...230 6.3.1 HTTPS e cookies seguros... 232 6.3.2 Autenticação multiníveis... 233 6.4 Resumo...236 Capítulo 7 Segurança...237 7.1 Cookies, sessões e roubo de sessões...238 7.2 Scripts entre sites (XSS)...240 7.2.1 Ataques XSS...241 7.2.2 Vulnerabilidades XSS no CSS... 243 7.2.3 Defenda seu aplicativo contra ataques XSS... 247 7.3 Falsificação de solicitação entre sites...250 7.3.1 Ataques XSRF...251 7.3.2 Roubo de JSON... 253 7.3.3 Defesa do seu aplicativo contra ataques XSRF... 255 7.4 Vulnerabilidades no provedor de conteúdo... 257 7.4.1 Falsificação de provedor de conteúdo...258 7.4.2 Furto de cliques... 261 7.4.3 Negação de serviço...264 7.5 Resumo...265 Capítulo 8 Desenvolvimento de um SDK remoto em JavaScript...266 8.1 Implementação de um SDK básico...270 8.1.1 Inicialização...270 8.1.2 Carregamento assíncrono...272 8.1.3 Exposição de funções públicas...277 8.1.4 Ouvintes de eventos...278 8.2 Versionamento... 281 8.2.1 Versionamento de URL...282 8.2.2 Inicialização versionada...285 8.3 Empacotamento das APIs de web services...289 8.3.1 Acesso a APIs de web services no cliente...290 8.3.2 Empacotamento da API da Camera Stork...295 8.3.3 Identificação de provedores de conteúdo... 301 8.3.4 Autorização de usuário e OAuth...307 8.4 Resumo...309

Sumário 9 Capítulo 9 Desempenho...311 9.1 Otimização da carga...313 9.1.1 Combinação e minificação do código-fonte...314 9.1.2 Redução de solicitações de imagens... 316 9.1.3 Colocação de arquivos em cache...319 9.1.4 Adiamento de solicitações HTTP... 320 9.2 Otimização do JavaScript... 329 9.2.1 Dentro do navegador: encadeamento de UI, repaint e reflow...330 9.2.2 Controle de chamadas dispendiosas: throttle e debounce... 332 9.2.3 Adiamento do cálculo com settimeout... 335 9.3 Desempenho percebido... 339 9.3.1 Ações otimistas do usuário...340 9.3.2 Apresentação antes de o documento estar pronto... 341 9.4 Resumo...344 Capítulo 10 Depuração e testes...345 10.1 Depuração... 347 10.1.1 Como servir código de desenvolvimento em produção...349 10.1.2 Como percorrer o código... 358 10.2 Testes...364 10.2.1 Testes de unidade, integração e regressão...365 10.2.2 Criação de testes de regressão com QUnit... 370 10.2.3 Criação de testes de regressão com Hiro... 374 10.3 Resumo... 379