2012-05-28 45 views
0

這是AS3部分:通過JavaScript調用中的ActionScript3 file.browse()觸發一個錯誤

import flash.net.FileReference; 
import flash.events.Event; 
import flash.external.ExternalInterface; 
import flash.system.Security; 

Security.allowDomain("*"); 

// file reference: 
var file:FileReference = new FileReference(); 
ExternalInterface.addCallback("bFile" , choose); 

function choose():void{ 
    ExternalInterface.call("alert('browse')"); 
    file.browse(); 
} 

HTML部分:

<object width="1px" height="1px"> 
<param name="movie" value="./ftest/uploader.swf"> 
<embed width="1px" height="1px" allowscriptaccess="always" id="uploader" src="./ftest/uploader.swf"> 
</object> 

JS部分:

$("#uploader")[ 0 ].bFile(); 

更新: - [通過點擊按鈕調用的動作]

$("#uploader")[ 0 ]返回對象(就如同我用getElementById)。

觸發後,警報被扔在它「broswe」,因此,我知道choose()被調用。

它不能獲得進一步。

我得到在每個瀏覽器的控制檯,這些行:未捕獲的錯誤:錯誤調用NPObject方法。

你能幫我弄清楚這裏有什麼問題嗎?

回答

1

相信你的問題是與安全相關的,瀏覽方法必須在用戶交互(或的KeyboardEvent的MouseEvent)直接響應調用。閱讀的文檔關於這個具體的詳細部分: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/FileReference.html#browse()

的部分從文檔我引用:

在Flash Player 10和Flash Player 9 Update 5中,你只能調用此方法成功響應用戶事件(例如,在鼠標點擊或按鍵事件的事件處理程序中)。否則,調用此方法會導致Flash Player拋出Error異常。

+0

是的,謝謝。我知道。剛剛在帖子中錯過了它。我通過點擊一個按鈕來調用這個動作。 –

+0

問題是,Flash Player運行時並不知道最終進行調用的JavaScript捕獲的點擊,它只知道發生點擊或鍵盤事件時發生了焦點,因此無法運行,有時間來驗證/知道這實際上是爲了響應點擊。在我的快速評估中,我是否正確地點擊是在JS中捕獲的,然後觸發對Flash容器的回調?重新檢查代碼看起來如此。 – shaunhusain

+0

是的,你說得對。但是,我如何將事件傳遞給AS?我嘗試過'onclick ='$(\「#uploader \」)[0] .bFile(event)''和'function choose(e:Event):void',但它失敗了。我昨天開始學習AS,我想我錯過了邏輯。 –