PDA

Просмотр полной версии : Глюки youtube-овского плеера для AS2 при повторном запуске


Omar2002
21.02.2011, 22:26
Добрый день.

На форуме поиском все что нашел - изучил, но к конечному выводу таки не пришел. Поэтому решил создать тему.

В общем есть у заказчика сайт на AS2 и он хочет чтобы прямо внутри него был список видеороликов и чтобы по клику открывался плеер ютюбовский там же.

Ну я сразу полез в гугль - там лежит пример из одной SWF-ки. В общем я этот код использовал - плеер запускается и работает нормально, но только первый раз. Как только я его убиваю (использую родной для плеера метод destroy(), опять же взято из официальной документации) начинают постоянно лететь ошибки вида:
*** Нарушение безопасности изолированной среды ***
SecurityDomain "http://s.ytimg.com/yt/swfbin/cps-vfl0JRSGx.swf" пытался получить доступ к несовместимому контексту "file://.../basic%5Fyoutube%5Fembed.swf"
(это при запуске во флеше)

Ну и если все это добро вовремя не вырубить, то плеер вобще напрочь подвисает после убиения плеера ютюбовского. Тут без разницы- в среде запущен плеер или в браузере.

Вот немного модифицированный код примера с гугля:
System.security.loadPolicyFile('http://youtube.com/crossdomain.xml');

var ytplayer:MovieClip = _root.createEmptyMovieClip("ytplayer", 1);

var ytPlayerLoaderListener:Object = {
onLoadInit: function() {
loadInterval = setInterval(checkPlayerLoaded, 250);
}
};

var loadInterval:Number;


function checkPlayerLoaded():Void {
if (ytplayer.isPlayerLoaded()) {
ytplayer.addEventListener("onStateChange", onPlayerStateChange);
ytplayer.addEventListener("onError", onPlayerError);
clearInterval(loadInterval);
}
}

function onPlayerStateChange(newState:Number) {
trace("New player state: "+ newState);
}

function onPlayerError(errorCode:Number) {
trace("An error occurred: "+ errorCode);
}

var ytPlayerLoader:MovieClipLoader = new MovieClipLoader();
ytPlayerLoader.addListener(ytPlayerLoaderListener);

ytPlayerLoader.loadClip("http://www.youtube.com/v/7yZgEqNutY4", ytplayer);

_b.onRelease = function (){
ytplayer.destroy();
ytplayer._visible = false;

}
_b1.onRelease = function (){
ytplayer._visible = true;
ytPlayerLoader.loadClip("http://www.youtube.com/v/Uc8ZHQOZ95Y", ytplayer);

}

При нажатии на любую из этих кнопок происходит подвисание. Ну если не произошло у кого-то сразу, как иногда бывает, это происходит если перед нажатием запустить проигрывание ролика.

Значит в тестовой флешке ничего кроме этих двух кнопок _b и _b1 нету, весь код в первом кадре.

Может все же у кого-то получилось побороть этот плеер?

mooncar
21.02.2011, 22:32
Для начала попробуйте вставить в свой проект строку
System.security.allowDomain("*");
где-нибудь в начале кода.
В теории эта строка позволяет загруженному с другого домена контенту рулить вашей флешкой.

Omar2002
26.02.2011, 19:11
Для начала попробуйте вставить в свой проект строку
System.security.allowDomain("*");
где-нибудь в начале кода.
В теории эта строка позволяет загруженному с другого домена контенту рулить вашей флешкой.

Спасибо огромное!
Реально помогло!