2013-05-15 23 views
0

我是Flash ActionScript的新手。我有一個閃存錄音機(修改jRecorder),可以用WAV格式錄製音頻,並且我已經添加了對MP3編碼的支持。記錄器使用ExternalInterface.callback()爲JS導出一些公共函數,並使用Flash容器(網站)中的ExternalInterface.call()調用JS回調。當從JS調用Flash導出的函數開始記錄/編碼/其他從Flash的函數也調用JS回調事件處理程序的事件類似recording_started,recording_stopped,encoding_started,encoding_ended等。它在IE,FF,Chrome中工作正常,但沒有在Opera中。我用它在Web項目如下 -Opera不調用閃存調用閃存的ExternalInterface.callback()函數flash

- >記錄時間爲最多2分鐘,當用戶停止它(按鈕),或者當時間限制達到記錄停止。對於這兩種情況,會觸發'recording_stopped'事件,並在該事件處理程序中調用mp3編碼函數(Flash導出函數)。

- >在這裏,JS事件處理程序由Flash調用,其中內部調用Flash導出的函數。

問題是,在opera中,導出的flash函數不在處理程序中調用。如果函數在處理函數的最後被調用,那麼函數上面的所有代碼都會被執行,但不是那個函數,如果我把函數放在處理函數的開頭,那麼下面的代碼就不會被執行。並且在控制檯中不顯示JS錯誤。但是,如果我從一個不是Flash的回調事件處理函數的JS函數調用它,該函數就可以正常執行。

我已經在兩臺不同的電腦上用Opera 11.51 & 12.15和flash player 11.3,11.6 & 11.7測試過它。

我的opera版本是12.15,flash player版本是11.7(適用於所有瀏覽器)。

爲什麼會發生?

+0

的可能重複的[在Opera ExternalInterface.call不執行(http://stackoverflow.com/questions/12026394/externalinterface-call-in-opera-doesnt-perform) – Raptor

+0

相關討論:HTTP:// my.opera.com/community/forums/topic.dml?id=264589 – Raptor

+0

@ShivanRaptor您聲明的兩個鏈接與我的情況不相似。首先,回調函數被flash調用,除非它不在回調函數中執行導出的函數。其次,問題與我的不相似。 –

回答

0

我發現了一種在輸入此問題時忽略此問題的方法。解決辦法是,而不是直接從事件處理程序調用閃存導出函數,我使用JS的window.setTimeout調用它()函數一樣 -

window.setTimeout(function(){ 
    if($.jRecorder.encodeToMp3()) 
     isEncoding = true;     
}, 0); 

我不知道爲什麼它正在發生。 @Raptor在這個問題上評論了一個理由,可能是這個原因或其他原因。