HTML5 FileApi + FileReader - 使用SWF提供<object>

sin*_*800 7 javascript html5 fileapi

我想使用HTML5 FileApi将SWF读取到OBJECT(或者EMBED,如果它更好吗?).

我当前的代码在Chrome/Iron(唯一支持xmlhttprequest v2 FormData的稳定浏览器)上崩溃了.我得到它将图像数据读入即时创建的IMG.但是对象会崩溃浏览器中的当前选项卡.

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);
Run Code Online (Sandbox Code Playgroud)

我真的读过这object.data部分吗?怎么做对了?有人知道吗?或者这是不完整的,我必须等待更好的实施?

jim*_*mbo 2

我建议尝试一些事情(按照复杂性增加的顺序):

  • 使用btoa对数据进行 base64 编码并使用data:URI设置它,
  • 不要使用 创建对象createElement,而是将<object>具有所有属性的标签构造为 HTML 字符串(包括上面的 base64 建议),然后使用 将其注入到 DOM 元素中innerHTML
  • 创建一个反射器 Web 服务,您可以在其中发布 swf 内容,它会为您提供一个 URL,然后将该 URL 传递给对象,
  • 与之前类似,创建一个反射器 Web 服务,您可以在其中发布 swf 内容,以全屏 IFRAM 作为目标,让该服务返回一个 HTML 文档,其中包括指向<object>服务器的内容。

后者的选项更加密集,并且需要您可能希望避免的服务器往返 - 只是您可能需要考虑更多选项。

ActionScript 3 有一个Loader也可能有用的。我不知道它是否支持data:URI,但如果支持,您可以编写一个引导加载程序 SWF,它直接运行本地 swf 文件的内容。