7

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?


Decode HTML from XML with NewLine

First I parse XML and retrieve this:

<p><strong>Berns Salonger - the City's

The I decode it with MWFeedParser (stringByDecodingHTMLEntities) and retrieve this:

<p><strong>Berns Salonger - the City's Ideal Meeting Place 

Note that this is only one line of many many lines which includes alot of
tags.

Then I replace
with \n and the console writes out the text with new lines. Everything is great except that all the other HTML tags is still there.

So I then run stringByConvertingHTMLToPlainText and all HTML tags dissapears. But also my replaced new lines.

How can I decode HTML without and at the same time replace
with \n to print out a nice formatted text in a UITextView?

4

1 回答 1

2

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.

于 2011-07-06T20:40:57.517 回答