Youtube as3プレーヤーAPIエラー
-
06-07-2019 - |
質問
youtube as3クロムレスプレーヤーを動作させようとしています。 youtubeをフォローしました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イベントが発生しますが、エラーが発生します。 Object(e).Dataをトレースすると、次のエラーが発生します:
ReferenceError: Error #1069: the property Data was not found for com.google.youtube.event.ExternalEvent and there is no standard value.
(swedishから翻訳)
Object(e.target).Data
に変更すると、" undefined"をトレースします。および Object(e.target)
は" [object SwfProxy]"をトレースします。
player.loadVideoById(" uad17d5hR5s");を試してみると
このエラーが発生します:
1061:静的型flash.display:Spriteの参照を介して未定義の可能性があるメソッドloadVideoByIdを呼び出します。
解決
loader.contentをスプライトとしてキャストする必要はないと思います。代わりに、プレーヤーをオブジェクト型にキャストする必要があります。 player変数は、API呼び出しにアクセスするためだけのものです。表示リストの配置、移動、および追加に関しては、SwfProxyオブジェクトを含むLoaderオブジェクトを使用します。このコードを試してください:
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); } } }
所属していません StackOverflow