개발자가 주목할 IE8 세미나 중 "Ajax 개발자가 IE8에 대해 알아야 할 모든 것" 부분에 대한 참고자료 입니다. 질문은 댓글 혹은 메일(jania902 at gmail dot com)로 해주시기 바랍니다.
2009년 3월 11일 기준 자료이므로 이후에 내용이 바뀔 수 있습니다.
감사합니다.
IE8_for_Ajax_Developers_final.pptx |
Segoe fonts.zip |
개요
- 주제: Ajax 개발자가 IE8에 대해 알아야 할 모든 것
- 소개: IE8의 새로운 기능, 타 브라우저와의 호환성, 개발자용 도구, 성능 개선 등 IE8과 관련하여 Ajax 개발자가 알아야 할 주요 이슈들을 소개합니다.
- 장소: 코엑스 컨퍼런스 센터 401호
- 일시: 2009/03/11 13:30~18:00 중 16:00~16:50
주제
1. Ajax
XMLHttpRequest:
- timeout property와 ontimeout event 추가됨.
-
setTimeout과 abort() 이용하던 기존 꼼수를 대체.
Cross Domain Request (XDR):
-
-
Cross-site XMLHttpRequest aka XMLHttpRequest2 대신 XDomainRequest 객체를 통해 XDR 지원
-
-
Client-side Cross-domain Security
-
XDomainRequest를 고려하게 된 배경에 대한 설명.
- Security by Design 원칙
-
SameOriginPolicy에 기반한 기존 XMLHttpRequest를 cross domain 용으로 확장하여 쓰는 것은 위험하다는 주장과 여러 커뮤니티의 사례 인용.
-
-
-
Firefox는 3.0 beta 단계에서 지원하다가 제거됨. 현재는 privileged script에서만 허용되는 상태. 3.5(or 3.1?) 이상에서 지원 예정.
-
-
Getting closer to a standard for client-side cross-site requests
-
IE Beta 2 부터는 W3C Cross Origin Resource Sharing에 의거하여 기존의 XDomainRequestAllowed: 1 header 대신 Access-Control-Allow-Origin: *에 응답하도록 수정됨.
-
Cross Document Messaging (XDM):
-
- XSS 공격은 막으면서 서로 다른 origin의 스크립트가 서로 메시지를 주고 받을 수 있도록 하기 위한 기능.
-
An Introduction to Cross-Document Messaging in Internet Explorer 8
-
기존의 IFRAME을 이용한 꼼수 혹은 서버측 Proxying을 이용하는 방법, GoogleCaja 등을 대체.
-
postMessage, onmessage
-
-
Enabling Mashups in Internet Explorer 8 with Cross Document Messaging
- Gadget 플랫폼을 구현하기 위한 좋은 방법.
-
IE 8 and Cross Document Messaging
- Firefox 3.1 RC 1, Webkit nightly도 XDM을 구현.
HTML/JSON Sanitizing:
-
- Built-in JSON object. 빠르고 안전한 JSON 처리.
- Special functions, toJSON(), are added to the prototypes of Date, Number, String, boolean objects
-
Doug Crockford의 json2.js에 기반. 이를 사용하고 있던 웹 사이트에서는 호환성 문제가 생기지 않을 것.
-
Native JSON in Firefox 3.1; Joins IE 8
- Firefox 3.1 도 Native JSON 지원.
- 참고로, Webkit nightly에서도 지원 중.
Connectivity:
-
AJAX - Connectivity Enhancements in Internet Explorer 8
- HTTP/1.1 on Broadband인 경우 호스트당 최대 6개의 동시 연결(기존 2개). 이는 HTTP/1.1 스팩에 따른 것(A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy)이었으나 Broadband, Ajax 등으로 인해 상황이 바뀌었음.
-
window.maxConnectionsPerServer로 알아낼 수 있음
-
onLine property of window.navigator and window.clientInformation. "Work offline" 뿐 아니라 실제 연결이 끊어진 경우도 true
-
body의 online, offline 이벤트 핸들러 지원(HTML5)
DOM Storage:
-
- "What is DOM Storage?" - cookie와 DOM storage 비교.
-
localStorage는 sessionStorage와 달리 여러 윈도/여러 세션 간 공유됨.
-
Firefox는 현재 sessionStorage만 지원. 비표준인 globalStorage가 localStorage와 유사하게 활용될 수 있음.
-
Webkit 최신 버전(Safari 4 public beta 등)은 sessionStorage와 localStorage 모두 지원.
Ajax Navigation:
-
AJAX - Introducing AJAX Navigations
-
Prev/Back 버튼 문제 지원을 위한 onhashchange 이벤트 추가. document.location.hash가 바뀌면 호출됨.
-
iframe, hash+setInterval 등을 이용한 기존의 꼼수를 대체.
-
2. 프로그래밍 일반
JScript:
-
-
기존 JScript와 ECMAScript 스팩의 차이를 밝히고 이를 제거하는 것이 첫 단계라는 글. See JScript Deviations from ES3
- 엄청난 악플들. 요약하자면 "8년 동안 뭐하다가 이제서야 고치는가", "JScript 문제를 왜 Javascript 문제라고 말하는가".
-
-
John Resig on ECMAScript Harmony
- ECMAScript 4(Mozilla, Apple, Opera, Google)와 ECMAScript 3.1(Microsoft, Yahoo) 그룹 간의 합의. ECMAScript Harmony 프로젝트 시작됨.
-
DeFactoStandards를 실제 표준으로. 예를 들면 JS Getter/Setter는 Mozilla, Apple, Opera에서 이미 구현한 기능.
-
ECMAScript 3 and beyond - the road to "Harmony"
- Harmony에 대한 MSDN JScript 블로그의 글. 특별한 내용은 없음.
-
What's New in JScript for IE8 Beta 2
- IE Beta 2의 개선사항 요약.
- 업계 최초의 Native JSON 지원. (2009년 3월 현재 Firefox 3.1 및 Webkit nightly에서 지원. 결국 누가 최초냐는 누가 먼저 정식 릴리즈를 하느냐의 문제)
- Developer Tool 지원 향상. 이를테면 console.log 지원, profiler 추가 등
-
Platform Improvements for IE8 Beta 2에 의하면 Beta 2에서 DOM prototype 지원 시작.
-
What is coming up with IE8 and 9?
- IE Team과의 web chat 요약. JScript 향상에 집중하고 있다고. "We're certainly focusing heavily on improving Javascript, in IE8 and beyond. I'd expect to see great things here in the future."
Performance:
-
GC Improvements in JScript for Internet Explorer 8 Beta 1
- IE8 Beta 1에서는 애플리케이션의 메모리 소비량에 따라 GC 실행 주기가 적응적으로 변하도록 개선
-
Performance Improvements in Internet Explorer 8 Beta 2
- JScript에 의해 참조되는 DOM 객체를 일반 JS 객체와 동일하게 취급. 따라서 Circular Reference로 인한 Memory Leak 문제가 발생하지 않음. IE7의 경우 페이지를 이동할 때에만 메모리가 release 되었음.
- Array 연산, String concatenation 등의 성능 향상
- Function calls, object creation, accessing object prototype properties and specific lookup patterns for JScript variables scoped to the window or this objects.
- Unblocked downloads
- Native JSON support
- Selector API
- Performance Profiler (see Developer Tools)
Selector API:
-
Selectors API Test Suite in IE 8
- 대부분 브라우저의 최신 빌드에서는 99% 성공. IE8은 44%만 성공. Major problem areas are lack of whitespace trimming, incorrect exceptions being thrown, and lack of full CSS 3 selector support.
-
- 전체 문서에서 찾은 후 범위에 의해 필터링하는 방식의 문제. Alex Russell (dojo), Andrew Dupont (prototype), John Resig (jquery) 등은 Spec 버그로 간주.
-
:visited는 보안상(privacy) 무시
- 결론: 기존 브라우저들 때문에 어차피 앞으로 최소 1~2년 간은 Selector API를 직접 쓸 일 없을 것. 적당한 라이브러리를 쓸 것을 권장함. 라이브러리 성능이 크게 향상될 것이라는 점에 의의가 있음.
DOM:
-
Document Object Model Prototypes, Part 1: Introduction
- Prototype 개념 소개.
- DOM Prototype 지원 소개 및 표준과의 차이점(hierarchy)
- DOM Prototype을 활용하는 좋은 사례 두 가지.
- IE8에서는 delete가 동적으로 추가된 property를 올바르게 지울 수 있음
-
var $ = document.getElementById 후에 $를 호출하면 $의 this는 document로 자동 binding. 하지만 이 방식은 추천하지 않음.
- 기타 호환성 문제 요약.
-
Document Object Model Prototypes, Part 2: Accessor (getter/setter) Support
- ECMAScript Harmony에 기반한 access 지원 소개
- 기타 브라우저와의 호환성 언급
-
Next IE 8 Release Candidate to have updated getter/setter support and DOM prototypes
- IE8의 accessor 소개 및 기타 브라우저와의 호환성 문제 언급.
-
기타 브라우저와 다른 방식으로 구현된 이유에 대해서는 ECMAScript getters and setters interoperability의 두번째 comment(by Kris Zyp) 참고.
-
Responding to Change: Updated Getter/Setter Syntax in IE8 RC 1
- 기타 브라우저와 다른 방식으로 구현된 이유 설명.
- 기존의 getter, setter가 get, set으로 바뀜.
3. 개발 도구
Developer Tool:
-
Discovering Internet Explorer Developer Tools
- 기능 전반에 걸친 간략한 설명
-
Using the Windows Internet Explorer 8 Developer Tools to Fix Your Site
- User Guide 형식의 소개글
-
Developer Tools in Internet Explorer 8 Beta 2
- Beta 2에서 추가된 점들 설명
-
console.log 지원
- JScript Profiler
- CSS Live editing
- Browser Mode와 Document Mode. Browser Mode는 "IE7에서 어떻게 보일까?"를 테스트, Document Mode에서는 "Rendering Mode를 바꾸면 어떻게 보일까?"를 테스트.
-
Debugging Script with the Developer Tools
- breakpoint 설정, watch, stacktrace, step-into/over/out, console
-
Profiling Script with the Developer Tools
- profiling and exporting
-
Developer Tools User Interface Reference
- Developers Tool - UI 설명
-
Developer Tools Keyboard Shortcuts Reference
- Developers Tool - 단축키 설명
- Selenium, JSSpec
4. 참고자료
Overview articles:
Sites:
이번 세션에서 다루지 않는 주제들
Accessibility and ARIA:
- ...
Rendering Mode and Standard Compliance:
Security:
-
IE8 Security Part V: Comprehensive Protection
- XDR, XDM
- HTML Sanitization, JSON Sanitization(Safer Mashups: JSON Sanitization 부분에서 HTML/JSON sanitization을 같이 쓰는 예시)
-
MIME-Handling Changes - Restrict Upsniff(images/*를 html/script로 해석하지 않음), Sniffing opt-out(Content-Type: text/plain; authoritative=true;), Force Save(X-Download-Options: noopen)
-
IE8 Security Part VI: Beta 2 Update
-
document.domain의 원래 값(app1.example.com)을 느슨하게(loosen)하는 것은 허용(example.com, 다시 조이는 것(tighten)은 막음(app1.example.com). 다른 브라우저와 통일된 동작. 다른 도메인과 데이터를 교환하려면 XDM, XDR 등을 사용할 것.
- Restricting Frame-Targeting: a.com에서 window.open으로 만든 새 창 a가 있을 때, b.com이 target을 a로 하여 window.open을 하면 새 창이 열리도록.
-
Beta1의 authoritative=true 방식을 X-Content-Type-Options: nosniff 방식으로 변경.
- CSS expression 제거(IE8 표준 랜더링 모드)
-
-
Statistical Validation of the IE8 XSS Filter
- 70% 정도의 XSS 공격을 막아줄 수 있는 자동 XSS Filter
-
Birth of a Security Feature: ClickJacking Defense
-
ClickJacking Defenses 설명
출처 : http://alankang.tistory.com/215
-