In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

YoutubeAPI Test(クロムレスプレーヤー)

YoutubeのビデオをBitmapDataでキャプチャしようとすると「Error #2121: セキュリティサンドボックス侵害 : Security.allowDomain を呼び出すことによって回避できる場合があります。」ってのが出るため、キャプチャして画像処理してあーだこーだしようとしたけど時間切れで今回は断念。

このYoutubeのセキュリティサンドボックス侵害ってsystem.Securityで回避できるものなのでしょうか?

ちなみに、自分が借りてるレンタルサーバなら「crossdomain-proxy.php」を設置して プロキシphp経由で読み込めばエラーは出なくなったのですが、wonderflでそのようなことはできるのでしょうか?
Get Adobe Flash player
by mousepancyo 13 Oct 2010
    Embed
/**
 * Copyright mousepancyo ( http://wonderfl.net/user/mousepancyo )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/m4NI
 */

package  {
    import flash.display.Sprite;
    import flash.display.Loader;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.net.URLRequest;
    import flash.system.Security;
    import flash.system.LoaderContext;
    import com.bit101.components.*;
    
    [SWF(backgroundColor="0", width="465", height="465", frameRate="30")]
    public class Main extends Sprite{
        private const APIPLAYER:String = "http://www.youtube.com/apiplayer?version=3"
        private var _player:Object;
        private var _loader:Loader;
        private var _videoID:String;
        private var _btn:PushButton;
        private var _input:InputText
        private var _isAddedPlayer:Boolean;
        
        public function Main() {
            graphics.beginFill(0)
            graphics.drawRect(0, 0, 465, 465)
            graphics.endFill()
            //
            Security.allowDomain("*");
            Security.loadPolicyFile("http://s.ytimg.com/crossdomain.xml");
            var context:LoaderContext = new LoaderContext(true);
            _loader = new Loader()
            _loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
            _loader.load(new URLRequest(APIPLAYER), context);
            //
            var label:Label = new Label(this, 180, 380, "Input Youtube VideoID");
            _input = new InputText(this, 180, 400, "yO1XA9zt9UA");
            _btn = new PushButton(this, 180, 420, "Load Video", btnClick);
        }
        
        private function onLoaderInit(event:Event):void {
            _loader.content.addEventListener("onReady", onPlayerReady);
            _loader.content.addEventListener("onError", onPlayerError);
            _loader.content.addEventListener("onStateChange", onPlayerStateChange);
            _loader.content.addEventListener("onPlaybackQualityChange", onVideoPlaybackQualityChange);
        }
        private function onPlayerReady(e:Event):void {
            _player = _loader.content;
            _player.scaleX = _player.scaleY = .726
            _player.y = stage.stageHeight * .5 - _player.height * .6
        }
        private function onPlayerError(e:Event):void {    }
        private function onPlayerStateChange(e:Event):void {    }
        private function onVideoPlaybackQualityChange(e:Event):void {    }        
        private function btnClick(e:MouseEvent):void{
            if(!_isAddedPlayer){
                addChild(_loader);
                _isAddedPlayer = true;
            }
            _player.loadVideoById(_input.text);
        }
    }
}