1

と呼んでいるhtmlオブジェクトを参照しています。私の用語がオフであれば謝ります。私のactionscriptスキルはかなり弱いソースです。ExternalInterface.callをjavascript関数の

ので、私は

ExternalInterface.call( 'someFunction')を作るいくつかのActionScriptを持っています。

呼び出し。

ExternalInterface.callコールを使用してsomeFunctionを直接呼び出したhtmlオブジェクトを参照することは可能ですか?

呼び出しを行うオブジェクトには、JavaScript経由でアクセス可能なCallback(ExternalInterface.addCallbackを介して)もあるものとします。現在

:、もう一度用語について申し訳ありません

Actionscript source 

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

Javascript source 

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

Actionscript source 

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

Javascript source 

function someFunction(){ 
    document.getElementById('idOfSWFObject').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"](); 
} 

EDIT:あなたが本当にsomeFunction引数にDOMオブジェクトをフラッシュへの参照を取得したい場合は、少しトリッキーな方法(私はむしろないだろう、それを達成することができるが、あなたの興味のためだけに)。

// 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コードをjsに挿入します。それは動作しますが、乱雑に見えます。

+0

私が探していたものに近いですが、私は実際のオブジェクト自体に参照を渡すようなことを望んでいました。私が探しているものが可能ではない可能性があります;) –

+2

まあ、私が知る限り、間違いなく可能です。 ExternalInterface呼び出しの引数を渡すものはすべてシリアル化されるため、プロセス内で参照を取得することはできません。しかし、あなたはトリックを行うことができます:EI呼び出しの第一引数はJSで評価され、そこに配置できるのはメソッド名だけです。 :)上の答えで私の編集を参照してください。 –

+0

そうするよ。ありがとう! –