Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson)...

15
Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson) Jama Software 2012 HTML5 Developer Conference

Transcript of Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson)...

Page 1: Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson) Jama Software 2012 HTML5 Developer Conference.

Those Who Control The Past Control The Future:The HTML5 History API

Sean Adkinson (@seanadkinson)

Jama Software

2012 HTML5 Developer Conference

Page 2: Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson) Jama Software 2012 HTML5 Developer Conference.

What is it?

The HTML5 History API gives JavaScript the ability to control

the browser’s URL

…without reloading the page

Page 3: Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson) Jama Software 2012 HTML5 Developer Conference.

Why History API now?

AJAX and single-page applications

New resources should have new URLs

The History API gives you the ability to use AJAX, and maintain proper URLs

Page 4: Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson) Jama Software 2012 HTML5 Developer Conference.

“#!” Solution

Uses browser in-page link functionality

Problems with this solutionOnly accessible to the clientDoesn’t work without JavaScriptCan’t use browser in-page linksIt’s a hack

Page 5: Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson) Jama Software 2012 HTML5 Developer Conference.

History API Spec

Two additional window.history methods

One additional window event

Page 6: Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson) Jama Software 2012 HTML5 Developer Conference.

Push Statewindow.history.pushState(data, title,

path);

Page 7: Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson) Jama Software 2012 HTML5 Developer Conference.

Replace Statewindow.history.replaceState(data,

title, path);

Page 8: Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson) Jama Software 2012 HTML5 Developer Conference.

Pop Statewindow.onpopstate =

function(event);

demo

Page 9: Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson) Jama Software 2012 HTML5 Developer Conference.

Single-Page Strategy

URL State, one-to-one

When state is changed, push new corresponding URL

On pop state (and initial page load), display based on URL State

If starting a new project, just use a framework like Backbone

demo

Page 10: Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson) Jama Software 2012 HTML5 Developer Conference.

Multi-Page Strategy

Intercept link clicks

Retrieve and display contentBack-end returns only HTML

Push/replace state

Github is a great exampledemo

Page 11: Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson) Jama Software 2012 HTML5 Developer Conference.

Browser SupportInternet Explorer None

Firefox 4.0+

Safari 5.0+

Chrome 8.0+

Opera 11.50+

iPhone 4.2.1+

Android None

Page 12: Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson) Jama Software 2012 HTML5 Developer Conference.

History.js

Abstraction layerHistory.pushState(data, title, url);History.replaceState(data, title, url);window.onstatechange

URLs can be pasted between IE Firefox

Adapters for jQuery, Zepto, MooTools, more

http://bit.ly/historyjs

Page 14: Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson) Jama Software 2012 HTML5 Developer Conference.

Sean Adkinson

Jama Software@seanadkinson

Page 15: Those Who Control The Past Control The Future: The HTML5 History API Sean Adkinson (@seanadkinson) Jama Software 2012 HTML5 Developer Conference.

Questions?