2011-12-30 33 views
2

我想創建一個多文件上傳的Flash應用程序從外部接口調用,但它不工作。AS3/JavaScript ExternalInterface和文件上傳

AS3:

var fileRef:FileReferenceList; 

ExternalInterface.addCallback('selectFiles', showDialog); 

function showDialog() 
{ 
    fileRef = new FileReferenceList(); 
    fileRef.browse(); 

// ExternalInterface.call('ASalert'); 
} 

的JavaScript/jQuery的:

$(function(){ 
    var uploader = this['_uploader']; 

    $('#selectFiles').click(function(){ 
    uploader.selectFiles(); 
    }) 
}) 

function ASalert() { 
    alert('Fired'); 
} 

當我運行該腳本,並註釋掉fileRef部分,並取消對警報呼叫時,它顯示警報,還當我的評論Out ExternalInterface調用,只保留fileRef部分,它顯示文件上傳對話框。

當我運行它打算,我得到以下錯誤:

Error calling method on NPObject 

搜索谷歌揮起上無論是上傳文件,或使用AS3 ExternalInterface的教程無休止的名單,但沒有使用它們在一起!

任何想法?

+0

我注意到'fileReferenceList'應該可能是'FileReferenceList',你的'ExternalInterface.addCallback()'可能應該是對函數的引用而不是匿名函數。 – Taurayi 2011-12-30 13:55:47

+0

我知道,這是一個錯字和一個快速寫出來的方式,因爲我實際上是在我的手機上鍵入這個字詞......就像我說的,它的每個單獨部分工作正常,只是不在一起。 – 2011-12-30 14:01:02

+0

你想要做什麼? – Taurayi 2011-12-30 14:20:09

回答

3

嘗試包裝你ExternalInterface.addCallback('selectFiles', showDialog);語句來檢查ExternalInterface的可用性的條件:

if(ExternalInterface.available) 
{ 
    ExternalInterface.addCallback('selectFiles', showDialog); 

} 

而且即使解決了這個問題,你要與此遇到麻煩:

function showDialog() 
{ 
    fileRef = new FileReferenceList(); 
    fileRef.browse(); 

// ExternalInterface.call('ASalert'); 
} 

如果沒有某種用戶交互,如鼠標單擊或按鍵,則不能調用FileReferenceList.browse()。這是沒有辦法的。

+0

謝謝澄清!我正在嘗試爲多文件上傳製作HTML5後備,這種上傳並沒有改變網站外觀,但看起來我無法做到!我只是使用Flash上​​傳,直到HTML5得到更好的支持,我想!你也幫助我與我的音樂播放器,我之所以這麼做是因爲它奇怪地將它整合爲HTML5的後備之作! – 2011-12-30 20:02:43

+0

爲什麼你不使用''?如果我正確地理解了你,那不需要HTML5,只是好的常規HTML。這樣你就不必倒退到閃光。此外,我認爲閃存將成爲HTML5的後備版本更有意義。 – Taurayi 2011-12-30 20:58:12

+0

哦,永遠不要你想多個文件上傳,因此'FileRereferenceList'。 – Taurayi 2011-12-30 21:07:12

2

這裏不是問題,您只能從交互事件中調用browse()

Adob​​e表示:

In Flash Player 10 and Flash Player 9 Update 5, you can only call this method successfully in response to a user event (for example, in an event handler for a mouse click or keypress event). Otherwise, calling this method results in Flash Player throwing an Error exception.

嘗試安裝Flash調試播放器,看看你得到那個異常,或試圖抓住它,並顯示錯誤消息。

+0

是的,Taurayi已經在他的答案中指出了我選擇的正確答案! – 2012-01-02 14:19:58

+0

對不起,錯過了那部分:) – 2012-01-02 14:26:53