2010-09-22 60 views
7

我想使用HTML5 FileApi將SWF文件讀取到OBJECT(或EMBED,如果它最好做?)。HTML5 FileApi + FileReader - Feed <object> with SWF

我目前的代碼在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); 

我真的讀到object.data部分嗎?它是如何做對的?有人知道嗎?或者這是不完整的,我必須等待更好的實施?

+0

請注意,show對象上的'data'屬性不相關。您需要的是名稱=「movie」和value =「yourdata」的子節點。請參閱http://kb2.adobe.com/cps/415/tn_4150.html – jimbojw 2011-07-08 16:34:46

回答

2

有幾件事情我會建議您嘗試(在日益複雜的順序):

  • Base64編碼與btoa的數據和使用,產生的使用createElement的對象data: URI
  • ,而不是設置它,將所有屬性的<object>標記構建爲HTML字符串(包括上面的base64建議),然後將其注入到DOM元素中,然後將它注入到innerHTML,
  • 中創建反射器Web服務,在其中POST POST swf內容,它會爲您提供URL,然後通過th e URL到對象
  • 與以前類似,創建一個反射器Web服務,您可以在其中發佈SWF內容,將全屏IFRAM作爲目標,讓服務返回一個包含<object>指向的HTML文檔到服務器。

這些選項的後面更加激烈,並且需要您可能想要避免的往返服務器 - 您可能需要考慮更多的選項。

ActionScript 3有一個Loader也可能有用。我不知道它是否支持URI的data:,但如果它支持,您可以編寫一個引導加載程序SWF,它直接運行本地swf文件的內容。

+0

對於第一個建議,上面做的事情已經給出了一個'data:'URI。至少這是''屬性中的內容,在我指定FileReader將其結果提供給src後。第二個建議似乎可能會導致同樣的錯誤,但也許它以某種方式繞過那一個,我會嘗試。第三個也是最後一個會很好,我認爲。該網站是一個圖像和swf上傳服務。所以我會改變我的代碼,立即上傳一切,並給它一個令牌:)。然後我可以做這個建議。 – sinni800 2011-07-07 10:07:36

+0

關於選項#1的重要部分是base64編碼。 SWF文件是二進制數據,當從JavaScript跨越到DOM插件時可能無法順利完成。因此,我建議通過btoa()運行e.target.result,然後創建一個類似「data:application/x-shockwave-flash; base64」,+ btoa(e.target.result)的字符串,並添加一個設置爲,並使用setAttribute(「value」,dataURI)設置其值。說了這麼多,用反射器服務你可能還是更好。 – jimbojw 2011-07-08 16:32:41

+0

我得檢查一下readAsDataURL(file);實際上返回...如果它已經base64或沒有..研究是由於..順便說一句:我也可以嘗試一個OBJECT URL。那個怎麼樣? – sinni800 2011-07-10 23:28:34