Ссылка на html-объект, который сделал ExternalInterface.call, на функцию javascript

Я прошу прощения, если моя терминология выключена, мои навыки на ActionScript довольно слабые.

Итак, у меня есть некоторые ActionScript, который делает

ExternalInterface.call('SomeFunction');

вызов.

Можно ли ссылаться на HTML-объект, который сделал вызов someFunction напрямую с помощью вызова ExternalInterface.call?

Предположим, что объект, который делает вызов, также имеет несколько обратных вызовов (через ExternalInterface.addCallback), которые доступны через javascript.

В настоящее время:

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

еще раз извините за терминологию. попытался связать это с таким количеством ключевых слов для будущих поисков.

Спасибо!

1 ответ

Решение

Я предполагаю, что вы говорите о ExternalInterface.objectID. Это свойство возвращает идентификатор, связанный с флэш-контейнером в объекте или теге внедрения.

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

Я предлагаю вам также передать имя "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"]();
}

РЕДАКТИРОВАТЬ: Если вы действительно хотите получить ссылку на flash 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. Это работает, но выглядит грязно.

Другие вопросы по тегам