Saturday, July 4, 2009

Google Chrome and Data URIs

Google Chrome's data URIs appear to work with plug-ins like acrobat (which isn't the case in Firefox). This allows you to do silly things like below:

STALLOWNED

(Requires chrome, acrobat 7+ and speakers :)

Under the hood, this is a JavaScript URI, which has a small script which replaces the document body with the following:

<object width="1" height="1" data="data:application/pdf;base64,JVBERi0xLjEKMSAwIG9iago8PAoJL1BhZ2VzIDIgMCBSCgkvVHlwZSAvQ2F0YWxvZwoJL09wZW5BY3Rpb24gPDwKCQkvSlMgNSAwIFIKCQkvUyAvSmF2YVNjcmlwdAoJPj4KPj4KZW5kb2JqCjIgMCBvYmoKPDwKCS9UeXBlIC9QYWdlcwoJL0tpZHMgWyAzIDAgUiBdCgkvQ291bnQgMQo+PgplbmRvYmoKMyAwIG9iago8PAoJL1Jlc291cmNlcyA8PAoJCS9Gb250IDw8CgkJCS9GMSA0IDAgUgoJCT4+Cgk+PgoJL1R5cGUgL1BhZ2UKCS9NZWRpYUJveCBbIDAgMCA3OTUgODQyIF0KCS9QYXJlbnQgMiAwIFIKPj4KZW5kb2JqCjQgMCBvYmoKPDwKCS9OYW1lIC9GMQoJL1R5cGUgL0ZvbnQKCS9TdWJ0eXBlIC9UeXBlMQoJL0Jhc2VGb250IC9IZWx2ZXRpY2EKPj4KZW5kb2JqCjUgMCBvYmoKPDwKCS9MZW5ndGggNTAKCS9GaWx0ZXIgL0ZsYXRlRGVjb2RlCj4+c3RyZWFtCnjaKykp1ivILEnOsDWwLgGyC0NSK0o0lIpLEnMUcvLL81JTlDTBEkCBbA1NawCrqxDXCmVuZHN0cmVhbQplbmRvYmoKeHJlZgowIDYKMDAwMDAwMDAwMCA2NTUzNSBmCjAwMDAwMDAwMTAgMDAwMDAgbgowMDAwMDAwMTIwIDAwMDAwIG4KMDAwMDAwMDE4OSAwMDAwMCBuCjAwMDAwMDAzMjUgMDAwMDAgbgowMDAwMDAwNDE3IDAwMDAwIG4KdHJhaWxlcgo8PAoJL1Jvb3QgMSAwIFIKCS9TaXplIDYKPj4Kc3RhcnR4cmVmCjU0NwolJUVPRgo=" type="application/pdf">

The enocded blob above is a base64 encoded PDF, that in in turn contains JavaScript to call the acrobat text-to-speech API.

P.S. For anyone interested in acrobat hacking, I'd strongly recommend a look at the "Origami" framework, created by Guillaume Delugré & Fred Raynal. This ruby based tool provides an open-source tool to construct, manipulate and analyse PDF documents.