2010-10-29 32 views
2

所以我敢肯定,這可能至少大多是瘋了,但我只是想AS3/JS交互,它讓我想知道 - 有誰知道確切如何如何通過AS3調用JS是什麼?例如,如果你做到以下幾點:瘋狂科學家Javascript迷惑想法

import flash.external.ExternalInterface; 
ExternalInterface.call("(function() { /* here's a block of code */ })"); 

做這些調用需要在年底eval()版,或者是他們能夠通過原生?

無論如何,讓我們假設一秒鐘,並說你是一個異端,實際上在實用的SWF(1x1,屏幕外的任何內容)中存儲了大量的Javascript,並且有基本的DOM事件來處理這些事件AS3,當它們被觸發時,它會使用ExternalInterface來立即執行JS - 因此,JavaScript中唯一加載的部分是與Flash通信的一小部分。一個天真的人甚至可能會說:「你可以將許多JS文件壓縮成一個加載的SWF文件,將它們分成不同的MC或任何!」,但真的,這不重要,並且在頁面已經加載。我已經使用AS3及其Socket類代替XHR輪詢(等),所以我一直沒有失望與AS3/JS的互動到目前爲止。 AFAIK AS3在Flash VM內執行,這意味着它自動比Javascript更低效,對嗎?有人可以闡明這將是多麼可怕,效率明智嗎?

回答

1

解構Flash影片中的AS3代碼並不是不可能的。雖然它會阻止偶然的觀察者,但如果有技能的人想要看你的腳本,他們將能夠做到。你只會在他們的路徑上投擲一個障礙,而不是無法通行的路障,並且可能比標準的JS混淆器生成的代碼更難破解。

至於性能,Flash執行與瀏覽器託管的Javascript解釋器相比較。有關一組比較,請參閱http://jacksondunstan.com/articles/232。它接近於代碼執行速度最快的JS *。

N.B. - 對於圖形用戶界面任務,目前爲止還沒有其他任何東西(即HTML 5)接近完成。這可能會隨着IE9新的JS引擎及其硬件加速而改變,但Adobe在某些時候是否能夠採用相同的東西還不清楚。

+0

啊,是的,絕對......我認爲「混淆」有點誤導,儘管重點是儘可能掩蓋它;在AS3中混淆JS意味着不僅需要對SWF進行反編譯,而且還需要對其中的代碼進行大量重寫/重新格式化,以使其具有重要意義。絕對不是一個完美的解決方案;更多的是POC。 – mway 2010-10-29 15:22:30

+0

你能澄清你的NB嗎?這對於Flash UI沒有任何用處;僅用於傳遞/執行Javascript。一個用戶界面可能是其中的一部分,當然,但它只是在Flash提供給瀏覽器執行的JS內構建的。 – mway 2010-10-29 15:37:47

+0

這就是爲什麼我將它添加爲後記。從嚴格的代碼執行角度來看,這並不重要,但取決於其他因素可能會引起興趣。 – Robusto 2010-10-29 15:43:20