2011-06-28 43 views
1

我很抱歉,如果我的術語關閉,我的actionscript技能相當薄弱。引用將ExternalInterface.call作爲javascript函數的html對象引用

所以,我有一些動作,使一個

ExternalInterface.call( 'someFunction');

呼叫。

是否可以引用使用ExternalInterface.call調用直接調用someFunction的html對象?

假設進行調用的對象還具有一些可通過javascript訪問的Callbacks(通過ExternalInterface.addCallback)。

目前:

Actionscript source 

ExternalInterface.call("someFunction"); 
ExternalInterface.addCallback("someCallback",someASfunction); 

Javascript source 

function someFunction(){ 
    document.getElementById('idOfSWFObject').someCallback(); 
} 

我想必須有一個方式:

Actionscript source 

ExternalInterface.call("someFunction",THE_OBJECT_MAKING_THE_CALL); 
ExternalInterface.addCallback("someCallback",someASfunction); 

Javascript source 

function someFunction(o){ 
    o.someCallback(); 
} 

再次,抱歉的術語。試圖用未來搜索的關鍵字來綁定它。

謝謝!

回答

3

我想你是在談論ExternalInterface.objectID。此屬性返回與閃存容器關聯的ID,其中對象嵌入標記。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html?filter_flex=4.1&filter_flashplayer=10.2&filter_air=2.en#objectID

我建議你也應該通過「someCallback」給你JS方法的名稱。這樣就不需要在JS中對其進行硬編碼。

下面是一個例子

// Actionscript source 

const jsMethodName:String = "someFunction"; 
const asCallbackName:String = "someCallback"; 
ExternalInterface.call(jsMethodName+"(document.getElementById("++")"++");"); 
ExternalInterface.addCallback(asCallbackName,someASfunction); 

// Javascript source 

function someFunction(flashId, callbackName) 
{ 
    var flashContainer = document.getElementById(flashId); 
    flashContainer["callbackName"](); 
} 

編輯:如果你真的想要得到一個參考閃爍DOM對象someFunction參數,你可以在一個有點棘手的方式實現它(我寧可不要,但只是爲了您的興趣)。

// Actionscript source 

const jsMethodName:String = "someFunction"; 
const asCallbackName:String = "someCallback"; 
ExternalInterface.addCallback(asCallbackName,someASfunction); 

ExternalInterface.call(
    "function(){"+ 
     jsMethodName+"("+ 
      "document.getElementById('"+ExternalInterface.objectID+"'),"+ 
      "'"+asCallbackName+"'"+ 
     ");"+ 
    "}" 
);  

// Javascript source 

function someFunction(flashContainer, callbackName) 
{ 
    flashContainer[callbackName](); 
} 

這樣你就可以將一些JS代碼從flash中注入到js中。它工作,但看起來很混亂。

+0

接近我正在尋找,但我希望更像是傳遞實際對象本身的引用而不是id名稱的字符串。它很有可能,我所尋找的是不可能的;) –

+2

那麼,據我所知,這是絕對不可能的。您通過ExternalInterface調用參數傳遞的所有內容都會被序列化,因此您無法在此過程中獲取參考。然而,你可以這樣做:EI調用的第一個參數在JS中被賦值,而你可以放在那裏的不僅僅是一個方法的名字。 :)在上面的答案中查看我的編輯。 –

+0

是的,那樣做。謝謝! –