Документация ExternalInterface.call
немного вводит в заблуждение. в нем говорится, что первый параметр должен быть именем функции, что не является полной правдой. это может быть любая строка, которая может быть оценена как выражение JS proprer. На самом деле
ExternalInterface.call(func, param_1, ... , param_n);
эквивалентно
eval(func)(param_1, ... , param_n);
так что вы можете также сделать следующее
ExternalInterface.call("function (foo) { alert(foo); return true; }","test");
этот метод иногда используется для Flash JS-инъекции . надеюсь, что это проясняет вещи ...