سؤال

وأنا أحاول الحصول على لاعب AS3 الخالية من يوتيوب للعمل. لقد تابعت يوتيوب أمثلة AS3 API وهذا ما حصلت حتى الآن:

public class Main extends Sprite 
{
    Security.allowDomain("*");

    private var player:Sprite;
    private var loader:Loader;

    public function Main():void 
    {
        if (stage) init();
        else addEventListener(Event.ADDED_TO_STAGE, init);
    }

    private function init(e:Event = null):void 
    {
        removeEventListener(Event.ADDED_TO_STAGE, init);

        loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
        loader.load(new URLRequest("http://www.youtube.com/apiplayer?version=3"));
    }

    private function onLoaderInit(e:Event):void
    {
        player = Sprite(loader.content);
        addChild(player);
        player.addEventListener("onReady", onPlayerReady);
        player.addEventListener("onError", onPlayerError);
        player.addEventListener("onStateChange", onPlayerStateChange);
        player.addEventListener("onPlayerQualityChange", onVideoPlaybackQualityChange);
    }

    private function onPlayerReady(e:Event):void
    {
        trace("Player ready: " + Object(e.target).Data);
        // player.loadVideoById("uad17d5hR5s");
    }
    private function onPlayerError(e:Event):void
    {
        trace("Player error: " + Object(e).Data);
    }
    private function onPlayerStateChange(e:Event):void
    {
        // trace("Player state: " + Object(e).Data);
    }
    private function onVideoPlaybackQualityChange(e:Event):void
    {
        trace("Video quality: " + Object(e).Data);
    }
}

ووonPlayerReady ونيران الأحداث onStateChange لكن يمكنني الحصول على أخطاء. عندما تتبع كائن (ه) .Data أحصل على هذا الخطأ:

ReferenceError: Error #1069: the property Data was not found for com.google.youtube.event.ExternalEvent and there is no standard value.
(stranslated من السويدية)

عند تغيير إلى Object(e.target).Data يتتبع "غير محددة" وObject(e.target) آثار "[كائن SwfProxy]".

إذا أحاول player.loadVideoById("uad17d5hR5s"); أحصل على هذا الخطأ:

و1061: Call to a possibly undefined method loadVideoById through a reference with static type flash.display:Sprite.

هل كانت مفيدة؟

المحلول

وأنا لا أعتقد أنك يجب أن يلقي loader.content باعتبارها العفريت. يجب أن يلقي اللاعب لنوع الكائن بدلا من ذلك. المتغير لاعب هو فقط للوصول إلى المكالمات API. من حيث وضع، والانتقال وإضافة إلى قائمة العرض، استخدم الكائن محمل التي تحتوي على الكائن SwfProxy. حاول هذا الرمز:

package
{
 import flash.display.*;
 import flash.events.*;
 import flash.system.Security;
 import flash.net.*;

 public class Main extends MovieClip 
 {
  Security.allowDomain("*");

  private var player:Object;
  private var loader:Loader;

  public function Main():void 
  {
   if (stage) init();
   else addEventListener(Event.ADDED_TO_STAGE, init);
  }

  private function init(e:Event = null):void 
  {
   removeEventListener(Event.ADDED_TO_STAGE, init);

   loader = new Loader();
   loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
   loader.load(new URLRequest("http://www.youtube.com/apiplayer?version=3"));
  }

  private function onLoaderInit(e:Event):void
  {
   player = Sprite(loader.content);
   addChild(loader);
   player.addEventListener("onReady", onPlayerReady);
   player.addEventListener("onError", onPlayerError);
   player.addEventListener("onStateChange", onPlayerStateChange);
   player.addEventListener("onPlayerQualityChange", onVideoPlaybackQualityChange);
  }

  private function onPlayerReady(e:Event):void
  {
   trace("Player ready: " + Object(e.target).Data);
   player.loadVideoById("uad17d5hR5s");
   player.setSize(480, 365);
  }
  private function onPlayerError(e:Event):void
  {
   trace("Player error: " + Object(e).Data);
  }
  private function onPlayerStateChange(e:Event):void
  {
   // trace("Player state: " + Object(e).Data);
  }
  private function onVideoPlaybackQualityChange(e:Event):void
  {
   trace("Video quality: " + Object(e).Data);
  }
 }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top