Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HTML5 FileApi + FileReader - Feed <object> with SWF

I want to use the HTML5 FileApi to read a SWF to an OBJECT (or EMBED, if it's better to do?).

My current code crashes on Chrome/Iron (the only stable browser which also supports the xmlhttprequest v2 FormData). I got it to read image data into a on-the-fly created IMG. But the object one crashes the current tab in the browser.

else if (file.type == "application/x-shockwave-flash") {
    var show = document.createElement("object");
    show.type = "application/x-shockwave-flash"
    show.style.width = "100%";
    show.style.height = "100%";
    show.id = "thumb";
    document.getElementById("thumbnails").appendChild(show);

    var reader = new FileReader();
    reader.onload = (function (aImg) { 
        return function (e) { aImg.data = e.target.result; }; 
    })(show);
    reader.readAsDataURL(file);

Do I really read to the object.data part? How is it done right? Anybody know? Or is this incomplete and I have to wait for better implementation?

like image 354
sinni800 Avatar asked Sep 22 '10 11:09

sinni800


1 Answers

A few things I'd recommend trying (in order of increasing complexity):

  • base64 encode the data with btoa and set it using a data: URI,
  • instead of creating the object using createElement, construct the <object> tag with all attributes as an HTML string (including the base64 advice above), then inject it into a DOM element with innerHTML,
  • create a reflector web service where you POST the swf content, it gives you a URL, then pass the URL off to the object,
  • similar to the previous, create a reflector web service where you POST the swf content, targeting a full-screen IFRAM as the target, have the service spits back an HTML doc including an <object> pointing back to the server.

The later of these options is more intense, and requires round-trips from the server that you'd probably want to avoid - just some more options you might want to consider.

ActionScript 3 has a Loader which may be useful as well. I don't know if it supports data: URI's, but if it does, you could write a boot loader SWF which runs the contents of the local swf file directly.

like image 165
jimbo Avatar answered Sep 21 '22 12:09

jimbo