2010-09-22 13 views
7

Tôi muốn sử dụng HTML5 FileApi để đọc SWF đến một số OBJECT (hoặc EMBED, nếu tốt hơn để làm?).HTML5 FileApi + FileReader - Nguồn cấp dữ liệu <object> với SWF

Mã hiện tại của tôi gặp sự cố trên Chrome/Iron (chỉ trình duyệt ổn định cũng hỗ trợ xmlhttprequest v2 FormData). Tôi đã đọc nó để đọc dữ liệu hình ảnh thành một IMG được tạo ra trên bay. Nhưng đối tượng một bị treo tab hiện tại trong trình duyệt.

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); 

Tôi có thực sự đọc phần object.data không? Làm thế nào nó được thực hiện đúng? Có ai biết không? Hay điều này không đầy đủ và tôi phải đợi để thực hiện tốt hơn?

+0

Lưu ý rằng thuộc tính 'dữ liệu' trên đối tượng hiển thị không có liên quan. Những gì bạn cần là một nút con với tên = "phim" và giá trị = "yourdata". Xem http://kb2.adobe.com/cps/415/tn_4150.html – jimbojw

Trả lời

2

Một vài điều tôi muốn khuyên bạn nên cố gắng (theo thứ tự tăng độ phức tạp):

  • base64 mã hóa dữ liệu với btoa và đặt nó sử dụng một data: URI,
  • thay vì tạo ra các đối tượng sử dụng createElement, xây dựng thẻ <object> với tất cả thuộc tính dưới dạng chuỗi HTML (bao gồm lời khuyên base64 ở trên), sau đó chèn nó vào phần tử DOM với innerHTML,
  • tạo dịch vụ web phản xạ nơi bạn đăng nội dung swf, nó cung cấp cho bạn URL, sau đó vượt qua thứ e URL tắt đối tượng,
  • tương tự như trước đó, tạo dịch vụ web phản xạ nơi bạn POST nội dung swf, nhắm mục tiêu IFRAM toàn màn hình làm mục tiêu, để dịch vụ quay trở lại tài liệu HTML bao gồm <object> chỉ lại đến máy chủ.

Tùy chọn sau này càng cường độ cao và yêu cầu các chuyến đi khứ hồi từ máy chủ mà bạn có thể muốn tránh - chỉ một số tùy chọn khác mà bạn có thể muốn xem xét.

ActionScript 3 có Loader cũng có thể hữu ích. Tôi không biết nếu nó hỗ trợ data: của URI, nhưng nếu có, bạn có thể viết một bộ tải khởi động SWF chạy nội dung của tập tin swf cục bộ trực tiếp.

+0

Đối với đề xuất đầu tiên, làm những gì tôi làm ở trên đã trả về một 'dữ liệu:' URI. Ít nhất đó là những gì có trong thuộc tính '' sau khi tôi gán cho FileReader để cung cấp kết quả cho src. Đề nghị thứ hai có vẻ như nó có thể dẫn đến lỗi tương tự, nhưng có lẽ nó bằng cách nào đó phá vỡ cái đó, tôi sẽ cố gắng. Người thứ ba và người cuối cùng sẽ làm việc tuyệt vời tôi nghĩ. Trang web là một hình ảnh và dịch vụ tải lên swf. Vì vậy, tôi sẽ thay đổi mã của mình để tải lên tức thì mọi thứ và cung cấp mã thông báo :). Sau đó, tôi có thể làm gợi ý này. – sinni800

+0

Phần quan trọng về tùy chọn # 1 là mã hóa base64. Tệp SWF là dữ liệu nhị phân, có thể không chuyển đổi tốt khi chuyển từ JavaScript sang DOM thành plugin. Vì vậy, tôi khuyên bạn nên chạy e.target.result thông qua btoa(), sau đó tạo một chuỗi như "data: application/x-shockwave-flash; base64," + btoa (e.target.result) và thêm vào số với giá trị được đặt bằng cách sử dụng setAttribute ("value", dataURI). Có nói tất cả điều đó, bạn có lẽ vẫn còn tốt hơn với một dịch vụ phản xạ. – jimbojw

+0

Tôi sẽ phải kiểm tra những gì readAsDataURL (tập tin); thực sự trả về ... Nếu nó đã được base64 hay không .. Nghiên cứu là do .. BTW: Tôi cũng có thể thử một URL OBJECT. làm như thế nào? – sinni800

Các vấn đề liên quan