Ссылка на 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. Это свойство возвращает идентификатор, связанный с флэш-контейнером в объекте или теге внедрения.
Я предлагаю вам также передать имя "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. Это работает, но выглядит грязно.