Получить определения ExternalInterface в Javascript - PullRequest
9 голосов
/ 13 января 2010

Есть ли способ получить список доступных функций из объекта Flash? Например, вы можете получить список всех методов объекта, выполнив:

for (var i in object) {
  if (typeof object[i] == "function") {
    console.log(i);
  }
}

Единственная проблема заключается в том, что при этом не будут отображаться никакие методы, зарегистрированные через API ExternalInterfaces. Я могу попытаться проверить, существует ли функция (object['method']), и она говорит мне, что это функция, но мне придется угадывать каждый существующий метод таким образом.

ПРИМЕЧАНИЕ. Очевидно, у меня нет доступа к ActionScript.

Ответы [ 5 ]

2 голосов
/ 17 июня 2013

Просто задайте этот вопрос, кажется, немного позже, но я все равно выложу ответ;) Используя IE10 (windows 7), я прекрасно работал для перечисления всех моих методов примерно так:

var obj = document.getElementById('flashObj');
for(var prop in obj){
  var fx = obj[prop];
  if(obj.hasOwnProperty(prop) && (typeof fx == 'function') && /eval\(instance/.test(fx)){
    console.log(prop)
  }
}

Обратите внимание, что это не сработало в Chrome или Firefox и только с точным регулярным выражением, поскольку IE10 не сообщает "собственный код", как это делают другие браузеры.

1 голос
/ 28 апреля 2010

Просто угадай, но посмотри, работает ли это. Все функции ExternalInterface должны быть определены в глобальном пространстве имен. Попробуйте встроить SWF в страницу HTML и получить все функции Javascript, определенные для страницы после загрузки страницы. Список глобальных пользовательских функций в JavaScript?

Список функций должен быть определен в SWF-файле.

1 голос
/ 21 апреля 2010

Проблема еще хуже: информация недоступна в ActionScript. Вы регистрируете новую функцию как ExternalInterface.addCallback('foo', foo) и не можете перечислить уже зарегистрированные обратные вызовы.

0 голосов
/ 27 апреля 2010

Полагаю, единственный способ - это проанализировать байт-код SWF-файла и попытаться собрать вызовы для метода ExternalInterface.addCallback.

http://www.google.com/search?q=parse+avm2

0 голосов
/ 15 апреля 2010

Мой инстинкт - нет, ExternalInterface - это, по сути, черный ящик или черный почтовый ящик, вы протаскиваете вещи, а иногда все возвращается, но вы не можете открыть дверь, чтобы увидеть, что внутри.

Без документации относительно того, что было раскрыто в SWF, единственное другое предложение - декомпилировать swf, чтобы взглянуть на источник.

...