ссылка на html-объект, который сделал ExternalInterface.call, на функцию javascript - PullRequest
1 голос
/ 28 июня 2011

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

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

ExternalInterface.call ('someFunction');

call.

можно ли ссылаться на 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 Ответ

3 голосов
/ 28 июня 2011

Полагаю, вы говорите о ExternalInterface.objectID. Это свойство возвращает идентификатор, связанный с флэш-контейнером, в теге object или embed .

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

РЕДАКТИРОВАНИЕ: Если вы действительно хотите получить ссылку на flash DOM-объект в аргументах someFunction, вы можете добиться этого немного хитрым способом (я бы предпочел, но не для вашего интереса). 1017 *

// 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. Это работает, но выглядит грязно.

...