开发者

referencing the html object that made the ExternalInterface.call to the javascript function called

i apologize if my terminology is off, my actionscript skills are pretty weak sauce.

so, i have some actionscript that makes a

ExternalInterface.call('someFunction');

call.

is it possible to reference the html object that made the call to someFunction directly using the ExternalInterface.call call?

Assume that the object that makes the call also has some Callbacks (via ExternalInterface.addCallback) that are accessible via javascript.

Currently:

Actionscript source

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

Javascript source

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

I'm thinking there must be a way of:

Actionscript so开发者_如何学Curce

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

Javascript source

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

once again, sorry about the terminology. tried to lace it with as many keywords for future searches.

thanks!


I guess you are talking about ExternalInterface.objectID. This property returns an id associated with flash container in object or embed tag.

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

I suggest that you should also pass the name of "someCallback" to you JS method. This way there will be no need to hardcode it in JS.

Here's an example

// 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: If you really want to get a reference to flash DOM object in someFunction arguments, you may achieve it in a bit tricky way (I would rather not, but just for your interest).

// 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]();
}

This way you inject some JS code from flash into js. It works, but looks messy.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜