Барабашка или кривые руки: Error calling method on NPObject! во Flex

Писал примитивное радио на flex с интерфейсом на html+jquery. Отлаживал функции взаимодействия через ExternalInterface, отлаживал в локальном html файле и вдруг ни с того ни с сего выхватил ошибку "Error calling method on NPObject" в консоли firebug.

Беглый поиск как обычно не дал ничего: как обычно хоть один идентичный моему вопрос на каком-нибудь заброшенном форуме, неотвеченный конечно же, и пара статей с буржуйских сайтов бог знает как и по каким ключевикам выброшенных на главную Яндекса.
Я промучался битых 20 минут. Восстановил состояния и .as, и .mxml, и .html/js файлов в состояние, в котором они были до отладки. Не помогло.
Воспользовался локальной историей изменений из flex 4. И все равно те же яйца, только в профиль.
Перезапустил браузер, перезапустил flex, перекомпилировал проект. Не помогает.
Предчувствуя мистику, ребутнул комп.
И о чудо! Заработало. Вернул все изменения вплоть до момента отладки и все чудесно.
В итоге 7 пункт из "10 признаков оператора техподдержки" опять подтвердился.

Но на этом пляски не закончились.

Проблема вернулась позже, когда я перенес радио на сервер. В firefox flash отлично отрабатывал, музыка играла, функции паузы/загрузки/громкости работали… но играло это все первые 20-30 запусков, после чего javascript вдруг объявил объект undefined и радио перестало запускаться.

В Chrome оно как оказалось, не запустилось и с первого разу, вывалив в консоль знакомую ошибку Error calling method on NPObject.

Углубившись в поиск, я выяснил причину и отыскал решение.

Причина оказалась на самом деле в том, что мой плеер на flex запрашивал внешний ресурс (конечно же это был url к радио).

Решением было добавить xml-файл кроссдоменных политик под названием crossdomain.xml в корень сайта, в котором явным образом указать, каким сайтам разрешен доступ извне, вот так он примерно выглядит у меня:

<?xml version="1.0"?>
<cross-domain-policy>
  <allow-access-from domain="*.online-radioroks.tavrmedia.ua" />
  <allow-access-from domain="*.online-hitfm.tavrmedia.ua" />
  <allow-access-from domain="*.radio.promodeejay.net" />
  <allow-access-from domain="cast.radiogroup.com.ua" />
  <allow-access-from domain="217.29.51.162" />
</cross-domain-policy>

Может указываться как основной домен с маской "*", что будет распространять действие на поддомены, может указываться домен целиком либо ip-адрес сайта, с ip-адресом маска не используется.

(с) bash

"Zorg: Ненавижу программирование!
Zorg: Вновь оказалось что я дурак! И пришельцы тут не причем!!!"

Полезно(1)Бесполезно(0)
Комментарии закрыты.