2010-09-22 10 views
7

Chcę użyć pliku HTML FileApi do odczytu pliku SWF do OBJECT (lub EMBED, jeśli lepiej to zrobić?).HTMLA FileApi + FileReader - Feed <object> z SWF

Mój bieżący kod ulega awarii w przeglądarce Chrome/Żelazo (jedyna stabilna, która obsługuje także xmlhttprequest v2 FormData). Mam go do odczytu danych obrazu do utworzonego IMG w locie. Ale obiekt jeden powoduje awarię aktualnej zakładki w przeglądarce.

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

Czy naprawdę czytałem część object.data? Jak to zrobić dobrze? Ktoś wie? Czy jest to niekompletne i muszę poczekać na lepsze wdrożenie?

+0

Należy zauważyć, że atrybut "data" obiektu show nie jest istotny. Potrzebny jest węzeł potomny o nazwie = "movie" i value = "yourdata". Zobacz http://kb2.adobe.com/cps/415/tn_4150.html – jimbojw

Odpowiedz

2

kilka rzeczy polecam próbuje (w kolejności rosnącej złożoności):

  • base64 kodowania danych z btoa i ustawić go przy użyciu data: URI,
  • zamiast tworzenia obiektu przy użyciu createElement, skonstruuj znacznik <object> ze wszystkimi atrybutami jako ciągiem HTML (w tym powyższą poradę base64), a następnie wprowadź go w element DOM z innerHTML,
  • utwórz usługę WWW z reflektorem, w której POST treść SWF, daje adres URL, następnie przejedź e URL do obiektu,
  • podobny do poprzedniego, utwórz usługę WWW z reflektorem, w której POST treść SWF, skierowana na pełnoekranowy IFRAM jako cel, ma usługę pluje z powrotem dokument HTML, w tym <object> wskazując wstecz na serwer.

Późniejsza z tych opcji jest bardziej intensywna i wymaga podróży w obie strony z serwera, którego prawdopodobnie chcesz uniknąć - tylko kilka opcji, które warto rozważyć.

ActionScript 3 ma również numer Loader. Nie wiem, czy obsługuje on identyfikatory URI typu data:, ale jeśli tak, można napisać plik SWF modułu ładującego, który bezpośrednio uruchamia zawartość lokalnego pliku SWF.

+0

Pierwsza sugestia, robiąc to, co robię powyżej, już daje identyfikator URI danych. Przynajmniej to jest w atrybucie '' po przydzieleniu FileReader, aby przekazać wyniki do src. Druga sugestia wygląda na to, że może spowodować ten sam błąd, ale może w jakiś sposób ominie to, spróbuję. Trzeci i ostatni będzie działał świetnie, myślę. Witryna jest usługą przesyłania obrazów i plików SWF. Zmieniłem więc kod, aby natychmiast przesłać wszystko i dać tokeny :). Wtedy mogę zrobić tę sugestię. – sinni800

+0

Ważną częścią dotyczącą opcji nr 1 jest kodowanie base64. Plik SWF to dane binarne, które mogą nie przejść dobrze, gdy przechodzimy z JavaScript do DOM na wtyczkę. Polecam więc uruchamianie e.target.result przez btoa(), a następnie utworzenie łańcucha typu "data: application/x-shockwave-flash; base64", + btoa (e.target.result) i dodanie do z jego wartością ustawioną za pomocą setAttribute ("value", daneURI). Powiedziawszy to wszystko, prawdopodobnie lepiej radzisz sobie z usługą reflektorów. – jimbojw

+0

Muszę sprawdzić, co to plik readAsDataURL (plik); faktycznie zwraca ... Jeśli jest to już base64 lub nie .. Badania są należne .. BTW: Mogę też wypróbować URL OBJECT. w jaki sposób? – sinni800