Не правильне використання ExternalIntarface призводить до його, майже непомітного, падіння
Wednesday, December 5, 2007Маємо (завантажити приклад):
- Дві функції в JavaSript: jsFunc_1 та jsFunc_2.
- Дві функції в ActionScript: asFunc_1 та asFunc_2.
- Для ActionScript функції додано колбеки через ExternalInterface.addCallback().
- В функції jsFunc_1 є виклик asFunc_1.
В функції asFunc_1 є виклик jsFunc_2.
В функції jsFunc_2 є виклик asFunc_2.
Тобто якщо викликати jsFunc_1, то повинен бути такий ланцюг викликів: jsFunc_1 > asFunc_1 > jsFunc_2 > asFunc_2.
Блоха з’являється на другій ланці. При спробі викликати jsFunc_2 нічого не відбувається. Ніякої помилки ні в ActionScript ані в JavaScript немає. І тільки ExternalInterface.call() при цьому Вам поверне null. Але якщо JavaScript функція нічого не повинна повертати, то цей результат не викличе підозри на помилку.
Вирішення:
Уникайте подібних ланцюгів викликів використовуючи, наприклад, setTimeout(), як в цьому прикладі.
Але й тут будьте обережні! Викликати ExternalInterface.call() через setTimeout() не можливо. Отримаєте помилку “SecurityError: Error #2000: No active security context.”. Тож Вам треба буде створити ще одну функцію.
