2010-01-12 44 views
9

有沒有辦法從Flash對象中獲取公開的函數列表?例如,你可以通過執行獲得對象中的所有方法的列表:在Javascript中獲取ExternalInterface定義

for (var i in object) { 
    if (typeof object[i] == "function") { 
    console.log(i); 
    } 
} 

唯一的問題是,這不會暴露通過ExternalInterfaces API註冊的任何方法。我可以嘗試看看函數是否存在(object['method']),它告訴我這是一個函數,但我必須以這種方式猜測每個現有的方法。

注意:顯然,我沒有訪問的動作。

回答

-1

我的直覺是沒有,ExternalInterface的本質上是一個黑盒子,或黑信箱,您可以通過捅的事情,有時東西回來,但你不能開門,看看裏面有什麼。

沒有證件,以什麼在SWF被曝光,唯一的建議是反編譯看看在源頭瑞士法郎。

1

問題更糟:信息在ActionScript中不可用。您註冊一個新功能爲ExternalInterface.addCallback('foo', foo),您不能列出已經註冊的回調。

1

只是一個猜測,但看看它是否工作。所有的ExternalInterface函數都應該在全局命名空間中定義。嘗試將SWF嵌入到HTML頁面中,並在加載頁面後獲取爲該頁面定義的所有Javascript函數。 List of global user defined functions in JavaScript?

的功能列表應在SWF文件中定義的那些。

2

只要按下這個問題,去晚了,似乎一點點,但我會反正發帖回答;) 使用IE10(Windows 7)中,它的工作完美的罰款對我來說,我列出的所有方法,像這樣:

var obj = document.getElementById('flashObj'); 
for(var prop in obj){ 
    var fx = obj[prop]; 
    if(obj.hasOwnProperty(prop) && (typeof fx == 'function') && /eval\(instance/.test(fx)){ 
    console.log(prop) 
    } 
} 

注意,這並沒有在Chrome或Firefox,只有與自IE10確切的正則表達式的工作不報告「本機代碼」爲其他瀏覽器做。

相關問題