SlideShare uma empresa 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.

Mais conteúdo relacionado

Mais procurados

(A16) LabMM3 - JavaScript - Erros
(A16) LabMM3 - JavaScript - Erros(A16) LabMM3 - JavaScript - Erros
(A16) LabMM3 - JavaScript - Erros
Carlos Santos
 
LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13LabMM3 - Aula teórica 13
LabMM3 - Aula teórica 13
Carlos Santos
 
Desenvolvimento em .Net - Excepções
Desenvolvimento em .Net - ExcepçõesDesenvolvimento em .Net - Excepções
Desenvolvimento em .Net - Excepções
Vitor Silva
 

Mais procurados (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)
 

Semelhante a MSDN Webcast - Melhores práticas cross browser

Palestra / SDD / Crossbrowsing
Palestra / SDD / CrossbrowsingPalestra / SDD / Crossbrowsing
Palestra / SDD / Crossbrowsing
hugodiasneto
 
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
Rodrigo Kono
 

Semelhante 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...
 

Mais de JP Clementi

Mais 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

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Último (6)

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
 
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
 
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
 
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
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 

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.