SlideShare una empresa de Scribd logo
1 de 35
HTML 5: Melhorespráticas Cross-Browser João Paulo Clementi Development Specialist blogs.msdn.com/jpclementi twitter.com/jpclementi 06/05/2010 Daniel Ferreira Development Specialist blogs.msdn.com/danielsf twitter.com/Eng_DanielSF
Agenda 2
Desafios de ser Cross-browser 3
demo
O quemaisimportanadetecção… if( condition ) { // Códigoprimário } else { // Códigoalternativo } 5
Primeironóstínhamosdetecção de versão 6 if( navigator.userAgent.indexOf('MSIE') != -1 ) { // Códigoescritopara browser X } else { // Códigoescritopara browser Y }
Depoistínhamosdetecção de objetos if( document.all ) { // Códigoescritopara browser X } else { // Códigoescritopara browser Y } 7
Agora temosdetecção de funcionalidades if( window.addEventListener ) { // Códigoescritopara browsers 	// quesuportamaddEventListener } else { // Códigoescritopara browsers 	// quenãosuportamaddEventListener } 8
Melhorespráticas Fazer Detecção de funcionalidade Detecção de comportamento NãoFazer Detectar browsers específicos Assumirfuncionalidadesnãorelacionadas IMPACTO: Custo de manutençãoreduzido 9
Fazer: Detecção de funcionalidade Testar a funcionalidade antes de usá-la Principalmenteparafuncionalidadesnovas Nãotãocríticoparafuncionalidadesbemestabelecidas Testarospadrões antes Sempreusarpadrõesquandosuportados Evitarutilizaracidentalmentefuncionalidadeslegadas 10
window.addEventListener("load", fn, false); Fazer: Detecção de funcionalidade 11
Fazer: Detecção de funcionalidade if( window.addEventListener ) { window.addEventListener("load", fn, false); } 12
Fazer: Detecção de funcionalidade if( window.addEventListener ) { window.addEventListener("load", fn, false); } elseif( window.attachEvent ) { window.attachEvent("onload", fn); } 13
demo
Fazer: detecção de comportamento Problema Um browser tem um bug emumafuncionalidade Uma deteçãobásica de funcionalidadefalhaaoidentificar o problema Solução Executar um testeparaidentificar o comportamentoquebrado Aplicar um workaround quandoele é detectado 15
Fazer: detecção de comportamento // Executar um testequedirecionapara um problemaconhecido vartestPassed = runTest(); // Checar se o testepassou if(!testPassed) { // Se não, aplicar um workaround } 16
demo
Comparação do path do código Detecção de funcionalidade Detecção de versão = Códigoalternativo = Ponto de deteção
Nãofazer: detectar browsers específicos Mas euseiqueestafuncionalidadefuncionaneste browser Estafuncionalidadedevefuncionarem outros browsers O novo browser deveadicionarsuporteparaestafuncionalidade Mas euseiqueestafuncionalidade tem um bug neste browser O mesmo bug podeexistirem outros browsers O bug podeserounãoconsertadoemumapróximaversão 19
// Using the User Agent String if( navigator.userAgent.indexOf(x) != -1 ) { // Browser-specific code } Nãofazer: detectar browsers específicos 20
Nãofazer: detectar browsers específicos // Using Objects if( document.all ) { // Browser-specific code }
Nãofazer: detectar browsers específicos // Using Library-based Detection if( jQuery.browser.msie ) { // Browser-specific code }
Nãofazer: detectar browsers específicos // Using Conditional Comments <!--[if IE]> 	// Browser-specific code <[endif]-->
Nãofazer: detectar browsers específicos // ... but if you must, target legacy only <!--[if IE lte 7]> 	// Legacy browser-specific code <[endif]-->
Nãofazer: assumirfuncionalidadenãorelacionadas Mas euseique o browser com X tem também Y Novos browsers podemter X e não Y Custo Risco de rupturaquandonovos browsers sãolançados
if( window.postMessage ) { 	… window.addEventListener(); 	… } Nãofazer: assumirfuncionalidadenãorelacionadas
Porqueninguémjánãofazisso? … mas lembre do custo
.target { border-radius: 20px; -moz-border-radius: 20px; -webkit-border-radius: 20px; } Fazer: detecção de funcionalidade no CSS 28
Fazer: detecção de funcionalidade no HTML <!-- Elements with fallback content --> <videosrc="test.vid"> <objectsrc="test.vid"> <ahref="test.vid"> 			Download Video </a> </object> </video> 29
Fazer: detecção de funcionalidade no HTML <!-- Generic element handling --> <svgwidth="100"height="100"> <circlefill="#090"cx="50"cy="50"r="50"/> </svg> 30
demo
Call to action
Resumo 33 Mais: http://api.jquery.com/jQuery.support/
Próximospassos 34 Baixe o Internet Explorer 9 Platform preview www.IETestDrive.com Visite o blog to time http://blogs.msdn.com/ie
© 2010 Microsoft Corporation. All rights reserved. Microsoft, MSDN, the MSDN logo, and [list other trademarks referenced] are trademarks of the Microsoft group of companies.   The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation.  Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.  MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

Más contenido relacionado

La actualidad más candente

Desenvolvimento web seguro cookies - Rodolfo Stangherlin
Desenvolvimento web seguro cookies - Rodolfo StangherlinDesenvolvimento web seguro cookies - Rodolfo Stangherlin
Desenvolvimento web seguro cookies - Rodolfo StangherlinTchelinux
 
Compilando e Usando OpenCV v. 3.0.0
Compilando e Usando OpenCV v. 3.0.0Compilando e Usando OpenCV v. 3.0.0
Compilando e Usando OpenCV v. 3.0.0André Moreira
 
Introdução à biblioteca OpenCV
Introdução à biblioteca OpenCVIntrodução à biblioteca OpenCV
Introdução à biblioteca OpenCVGuto Kaberdock
 
Introdução ao CMake
Introdução ao CMakeIntrodução ao CMake
Introdução ao CMakePaulo Remoli
 
(A16) LabMM3 - JavaScript - Erros
(A16) LabMM3 - JavaScript - Erros(A16) LabMM3 - JavaScript - Erros
(A16) LabMM3 - JavaScript - ErrosCarlos Santos
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com DjangoMarcos Petry
 
LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13Carlos Santos
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasRodrigo Branas
 
Desenvolvimento em .Net - Excepções
Desenvolvimento em .Net - ExcepçõesDesenvolvimento em .Net - Excepções
Desenvolvimento em .Net - ExcepçõesVitor Silva
 
Como os browsers funcionam - Front in Floripa 2014
Como os browsers funcionam - Front in Floripa 2014Como os browsers funcionam - Front in Floripa 2014
Como os browsers funcionam - Front in Floripa 2014Filipi Zimermann
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Rafael Ponte
 

La actualidad más candente (18)

Desenvolvimento web seguro cookies - Rodolfo Stangherlin
Desenvolvimento web seguro cookies - Rodolfo StangherlinDesenvolvimento web seguro cookies - Rodolfo Stangherlin
Desenvolvimento web seguro cookies - Rodolfo Stangherlin
 
Compilando e Usando OpenCV v. 3.0.0
Compilando e Usando OpenCV v. 3.0.0Compilando e Usando OpenCV v. 3.0.0
Compilando e Usando OpenCV v. 3.0.0
 
Introdução à biblioteca OpenCV
Introdução à biblioteca OpenCVIntrodução à biblioteca OpenCV
Introdução à biblioteca OpenCV
 
Introdução ao CMake
Introdução ao CMakeIntrodução ao CMake
Introdução ao CMake
 
(A16) LabMM3 - JavaScript - Erros
(A16) LabMM3 - JavaScript - Erros(A16) LabMM3 - JavaScript - Erros
(A16) LabMM3 - JavaScript - Erros
 
Introdução OpenCV (Pt-Br) com exemplos
Introdução OpenCV (Pt-Br) com exemplosIntrodução OpenCV (Pt-Br) com exemplos
Introdução OpenCV (Pt-Br) com exemplos
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com Django
 
LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13
 
Vivendo de hacking
Vivendo de hackingVivendo de hacking
Vivendo de hacking
 
Clean Code
Clean CodeClean Code
Clean Code
 
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo BranasNode.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
Node.js - #7 - Core Modules - http - Parte 1 - Rodrigo Branas
 
Desenvolvimento em .Net - Excepções
Desenvolvimento em .Net - ExcepçõesDesenvolvimento em .Net - Excepções
Desenvolvimento em .Net - Excepções
 
Introdução ao Drupal
Introdução ao DrupalIntrodução ao Drupal
Introdução ao Drupal
 
PHPMongoDB
PHPMongoDBPHPMongoDB
PHPMongoDB
 
Frameworks para C 3º DeSif
Frameworks para C 3º DeSifFrameworks para C 3º DeSif
Frameworks para C 3º DeSif
 
Como os browsers funcionam - Front in Floripa 2014
Como os browsers funcionam - Front in Floripa 2014Como os browsers funcionam - Front in Floripa 2014
Como os browsers funcionam - Front in Floripa 2014
 
Primeiros passos com protractor - GUTS-SC
Primeiros passos com protractor - GUTS-SCPrimeiros passos com protractor - GUTS-SC
Primeiros passos com protractor - GUTS-SC
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
 

Similar a MSDN Webcast - Melhores práticas cross browser

Palestra / SDD / Crossbrowsing
Palestra / SDD / CrossbrowsingPalestra / SDD / Crossbrowsing
Palestra / SDD / Crossbrowsinghugodiasneto
 
Html5 pt - Offline Apps
Html5 pt - Offline AppsHtml5 pt - Offline Apps
Html5 pt - Offline AppsByclosure
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScriptThiago Poiani
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaDr. Spock
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersHarlley Oliveira
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
Minicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São GabrielMinicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São GabrielMarcelo Linhares
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryHarlley Oliveira
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsSuissa
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComunidade NetPonto
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 
Aula 1 view model livedata e databinding.pptx
Aula 1   view model livedata e databinding.pptxAula 1   view model livedata e databinding.pptx
Aula 1 view model livedata e databinding.pptxRicardo Ogliari
 
Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Rodrigo Urubatan
 
OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)Ricardo Rufino
 
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010Rodrigo Kono
 
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaChrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaJoselito Nascimento
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
 

Similar a MSDN Webcast - Melhores práticas cross browser (20)

Palestra / SDD / Crossbrowsing
Palestra / SDD / CrossbrowsingPalestra / SDD / Crossbrowsing
Palestra / SDD / Crossbrowsing
 
Html5 pt - Offline Apps
Html5 pt - Offline AppsHtml5 pt - Offline Apps
Html5 pt - Offline Apps
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScript
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com Java
 
JavaScript e JQuery para Webdesigners
JavaScript e JQuery para WebdesignersJavaScript e JQuery para Webdesigners
JavaScript e JQuery para Webdesigners
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
Minicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São GabrielMinicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
Minicurso Ajax - 5. Semana de Informática PUC Minas São Gabriel
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQuery
 
DevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webappsDevDay - O elo perdido: sincronizando webapps
DevDay - O elo perdido: sincronizando webapps
 
Como ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noiteComo ser programador durante o dia e mesmo assim dormir bem à noite
Como ser programador durante o dia e mesmo assim dormir bem à noite
 
RubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direitoRubyConfBr 2015 - Rails & Javascript: faça isso direito
RubyConfBr 2015 - Rails & Javascript: faça isso direito
 
Aula 1 view model livedata e databinding.pptx
Aula 1   view model livedata e databinding.pptxAula 1   view model livedata e databinding.pptx
Aula 1 view model livedata e databinding.pptx
 
Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_Desenvolvendo aplicacoes mobile_com_html_css_
Desenvolvendo aplicacoes mobile_com_html_css_
 
OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)OpenDevice IoT - 2016 (LowLevel)
OpenDevice IoT - 2016 (LowLevel)
 
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
Faça Sucesso Desenvolvendo com ASP.NET 4, ASP NET MVC e Visual Studio 2010
 
Web design responsivo e adaptativo - HTML5/CSS3
Web design responsivo e adaptativo - HTML5/CSS3Web design responsivo e adaptativo - HTML5/CSS3
Web design responsivo e adaptativo - HTML5/CSS3
 
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosaChrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
Chrome Apps e NodeWebkit: traga seu webapp para o Desktop - #outubrorosa
 
Html5
Html5Html5
Html5
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 

Más de JP Clementi

Azure Privacy & GDPR @ Service Management World
Azure Privacy & GDPR @ Service Management WorldAzure Privacy & GDPR @ Service Management World
Azure Privacy & GDPR @ Service Management WorldJP Clementi
 
Programas de relacionamento e reconhecimento da microsoft
Programas de relacionamento e reconhecimento da microsoftProgramas de relacionamento e reconhecimento da microsoft
Programas de relacionamento e reconhecimento da microsoftJP Clementi
 
Java x .NET - Windows phone 7 e o Desenvolvimento com Silverlight e XNA
Java x .NET - Windows phone 7  e o Desenvolvimento com Silverlight e XNAJava x .NET - Windows phone 7  e o Desenvolvimento com Silverlight e XNA
Java x .NET - Windows phone 7 e o Desenvolvimento com Silverlight e XNAJP Clementi
 
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...JP Clementi
 
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...JP Clementi
 
MSDN e TechNet Webcast - Será que você usa tudo o que o Windows Client oferec...
MSDN e TechNet Webcast - Será que você usa tudo o que o Windows Client oferec...MSDN e TechNet Webcast - Será que você usa tudo o que o Windows Client oferec...
MSDN e TechNet Webcast - Será que você usa tudo o que o Windows Client oferec...JP Clementi
 

Más de JP Clementi (7)

Azure Privacy & GDPR @ Service Management World
Azure Privacy & GDPR @ Service Management WorldAzure Privacy & GDPR @ Service Management World
Azure Privacy & GDPR @ Service Management World
 
Programa MVP
Programa MVPPrograma MVP
Programa MVP
 
Programas de relacionamento e reconhecimento da microsoft
Programas de relacionamento e reconhecimento da microsoftProgramas de relacionamento e reconhecimento da microsoft
Programas de relacionamento e reconhecimento da microsoft
 
Java x .NET - Windows phone 7 e o Desenvolvimento com Silverlight e XNA
Java x .NET - Windows phone 7  e o Desenvolvimento com Silverlight e XNAJava x .NET - Windows phone 7  e o Desenvolvimento com Silverlight e XNA
Java x .NET - Windows phone 7 e o Desenvolvimento com Silverlight e XNA
 
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
 
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
 
MSDN e TechNet Webcast - Será que você usa tudo o que o Windows Client oferec...
MSDN e TechNet Webcast - Será que você usa tudo o que o Windows Client oferec...MSDN e TechNet Webcast - Será que você usa tudo o que o Windows Client oferec...
MSDN e TechNet Webcast - Será que você usa tudo o que o Windows Client oferec...
 

Último

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 

Último (8)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

MSDN Webcast - Melhores práticas cross browser

  • 1. HTML 5: Melhorespráticas Cross-Browser João Paulo Clementi Development Specialist blogs.msdn.com/jpclementi twitter.com/jpclementi 06/05/2010 Daniel Ferreira Development Specialist blogs.msdn.com/danielsf twitter.com/Eng_DanielSF
  • 3. Desafios de ser Cross-browser 3
  • 5. O quemaisimportanadetecção… if( condition ) { // Códigoprimário } else { // Códigoalternativo } 5
  • 6. Primeironóstínhamosdetecção de versão 6 if( navigator.userAgent.indexOf('MSIE') != -1 ) { // Códigoescritopara browser X } else { // Códigoescritopara browser Y }
  • 7. Depoistínhamosdetecção de objetos if( document.all ) { // Códigoescritopara browser X } else { // Códigoescritopara browser Y } 7
  • 8. Agora temosdetecção de funcionalidades if( window.addEventListener ) { // Códigoescritopara browsers // quesuportamaddEventListener } else { // Códigoescritopara browsers // quenãosuportamaddEventListener } 8
  • 9. Melhorespráticas Fazer Detecção de funcionalidade Detecção de comportamento NãoFazer Detectar browsers específicos Assumirfuncionalidadesnãorelacionadas IMPACTO: Custo de manutençãoreduzido 9
  • 10. Fazer: Detecção de funcionalidade Testar a funcionalidade antes de usá-la Principalmenteparafuncionalidadesnovas Nãotãocríticoparafuncionalidadesbemestabelecidas Testarospadrões antes Sempreusarpadrõesquandosuportados Evitarutilizaracidentalmentefuncionalidadeslegadas 10
  • 11. window.addEventListener("load", fn, false); Fazer: Detecção de funcionalidade 11
  • 12. Fazer: Detecção de funcionalidade if( window.addEventListener ) { window.addEventListener("load", fn, false); } 12
  • 13. Fazer: Detecção de funcionalidade if( window.addEventListener ) { window.addEventListener("load", fn, false); } elseif( window.attachEvent ) { window.attachEvent("onload", fn); } 13
  • 14. demo
  • 15. Fazer: detecção de comportamento Problema Um browser tem um bug emumafuncionalidade Uma deteçãobásica de funcionalidadefalhaaoidentificar o problema Solução Executar um testeparaidentificar o comportamentoquebrado Aplicar um workaround quandoele é detectado 15
  • 16. Fazer: detecção de comportamento // Executar um testequedirecionapara um problemaconhecido vartestPassed = runTest(); // Checar se o testepassou if(!testPassed) { // Se não, aplicar um workaround } 16
  • 17. demo
  • 18. Comparação do path do código Detecção de funcionalidade Detecção de versão = Códigoalternativo = Ponto de deteção
  • 19. Nãofazer: detectar browsers específicos Mas euseiqueestafuncionalidadefuncionaneste browser Estafuncionalidadedevefuncionarem outros browsers O novo browser deveadicionarsuporteparaestafuncionalidade Mas euseiqueestafuncionalidade tem um bug neste browser O mesmo bug podeexistirem outros browsers O bug podeserounãoconsertadoemumapróximaversão 19
  • 20. // Using the User Agent String if( navigator.userAgent.indexOf(x) != -1 ) { // Browser-specific code } Nãofazer: detectar browsers específicos 20
  • 21. Nãofazer: detectar browsers específicos // Using Objects if( document.all ) { // Browser-specific code }
  • 22. Nãofazer: detectar browsers específicos // Using Library-based Detection if( jQuery.browser.msie ) { // Browser-specific code }
  • 23. Nãofazer: detectar browsers específicos // Using Conditional Comments <!--[if IE]> // Browser-specific code <[endif]-->
  • 24. Nãofazer: detectar browsers específicos // ... but if you must, target legacy only <!--[if IE lte 7]> // Legacy browser-specific code <[endif]-->
  • 25. Nãofazer: assumirfuncionalidadenãorelacionadas Mas euseique o browser com X tem também Y Novos browsers podemter X e não Y Custo Risco de rupturaquandonovos browsers sãolançados
  • 26. if( window.postMessage ) { … window.addEventListener(); … } Nãofazer: assumirfuncionalidadenãorelacionadas
  • 28. .target { border-radius: 20px; -moz-border-radius: 20px; -webkit-border-radius: 20px; } Fazer: detecção de funcionalidade no CSS 28
  • 29. Fazer: detecção de funcionalidade no HTML <!-- Elements with fallback content --> <videosrc="test.vid"> <objectsrc="test.vid"> <ahref="test.vid"> Download Video </a> </object> </video> 29
  • 30. Fazer: detecção de funcionalidade no HTML <!-- Generic element handling --> <svgwidth="100"height="100"> <circlefill="#090"cx="50"cy="50"r="50"/> </svg> 30
  • 31. demo
  • 33. Resumo 33 Mais: http://api.jquery.com/jQuery.support/
  • 34. Próximospassos 34 Baixe o Internet Explorer 9 Platform preview www.IETestDrive.com Visite o blog to time http://blogs.msdn.com/ie
  • 35. © 2010 Microsoft Corporation. All rights reserved. Microsoft, MSDN, the MSDN logo, and [list other trademarks referenced] are trademarks of the Microsoft group of companies.   The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation.  Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.  MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.