我想,你誤解了文檔。 callback
在這個實例中只是對Flash中的函數的引用,而不是對您調用的某個回調的回調。
基本上,你用.call()
來調用AS的JS函數;並且您使用.addCallback()
來告訴Flash Player應該根據名稱調用哪個AS函數。
在你的例子中,theFunction
會得到一個參數爲'foo',它是引用你的匿名AS函數的名字。不知道爲什麼你想要通過這樣的功能,但如果需要,你可以只用
function theFunction(callback) {
// .. do something...
swfObject[callback]();
}
把它從JavaScript現在,如果你沒有在JS/HTML側控制,我我不確定你是否可以這樣做。不知道爲什麼你需要,無論如何 - JS調用是同步的,就好像它們在同一個線程上運行一樣,這意味着Flash Player將執行JS代碼,然後返回到Flash Player ...您沒有等待執行或任何事情。
此外,如果你真的需要控制頁面不接觸JS/HTML的一面,記得您可以通過.call
注入的JS代碼全部作品 - 它並不需要一個簡單的函數調用。您可以從SWF內部創建整個功能。例如,
var js:XML = <script><![CDATA[
// Javascript code...
]]></script>;
ExternalInterface.call(js);
或者,如果你需要的回數據,你並不需要一個回調或者 - 只是做一個簡單的通話中
// JS
function isNumberZero(__num) {
return __num == 0;
}
// AS
trace ("Is number zero = " + ExternalInterface.call("isNumberZero", 10));
不知道這是否有助於在所有。如果沒有,那麼有更多關於你想要做什麼的信息是很好的。
來源
2010-09-27 18:53:47
zeh
謝謝,但我明白ExternalInterface的是如何工作的(當然,除非你可以在頁面中插入新的JavaScript,這是新信息)。我試圖濫用addCallback來進行實際的回調,我確實需要這樣做,因爲Javascript函數會執行異步的Internet請求。無論如何,我們現在可以控制HTML/JS方面。 – 2010-09-27 19:37:13