Не удается получить доступ к API YouTube из Adobe Air (с использованием JavaScript) - PullRequest
0 голосов
/ 10 декабря 2010

Я действительно новичок в Adobe Air, и я пытаюсь получить список видео YouTube определенного пользователя с помощью API YouTube через JavaScript.

Я попробовал несколько примеров, которые, кажется, прекрасно работают, когда я просто нажимаю на него (в Aptana Studio) и запускаю как веб-приложение JavaScript.

Как только я пытаюсь запустить то же самое, что и приложение Adobe Air, я не получаю никаких данных. Это почему? Я не знаю, есть ли что-то очень очевидное, что я пропускаю или что.

Это то, на что я смотрел совсем недавно: http://code.google.com/apis/youtube/2.0/developers_guide_json.html

Может ли кто-нибудь указать мне правильное направление или сказать, почему это не работает в Adobe Air?

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Обновление: хорошо, вот как я это получил, для всех, кто посещает с 2019 года (наконечник шляпы до http://xkcd.com/979/):

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%"
    backgroundColor="#000000" verticalAlign="middle" horizontalAlign="center"
    creationComplete="init()" borderStyle="solid">

<mx:Script>
<![CDATA[
    import mx.core.UIComponent;

    public var html : HTMLLoader = null;
    protected var url : String  = null;


    protected function init()
    {
        /* Your embedded html with all the youtube REST calls is in the "local"
           subdirectory of the application directory. Note the relation between
           the local url, the sandbox root and the remote url. */
        var localUrl : String = "app:/local/yt.html";
        var sandboxRoot : String = "http://youtube.com/";
        var remoteUrl : String = "http://youtube.com/local/yt.html";

        html = new HTMLLoader();
        html.addEventListener(Event.COMPLETE, htmlLoaded);

        /* Embed your youtube html in an iframe that is loaded dynamically. You
           could also just have this html code in a separate html file and load
           it through html.load() instead of html.loadString(). */
        var htmlString : String = "<html>"
            + "<body><center>"
            +"<iframe width='100%' height='100%' src='" +remoteUrl
                +"' sandboxRoot='"+sandboxRoot+"' documentRoot='app:/' "
                +" allowCrossDomainXHR='true'" /* May not be necessary */
                +" id='yt' name='yt'></iframe>"
            + "</center></body></html>";

        /* The next line is needed to allow the REST API in the embedded html 
           to call home when loading through loadString. */
        html.placeLoadStringContentInApplicationSandbox = true; 
        html.loadString(htmlString);
    }

    protected function htmlLoaded(e:Event):void
    {
        html.removeEventListener(Event.COMPLETE, htmlLoaded);
        frame.addChild(html);
        trace("html load complete.");
    }
]]>
</mx:Script>
<mx:UIComponent id="frame" width="100%" height="100%" visible="true"/>
</mx:HBox>

Обратите внимание, что это очищенная версия моего кода, и я не пробовал запускать его, поэтому он может не работать "из коробки", но это по сути.

0 голосов
/ 07 декабря 2011

Я считаю, что причина в том, что AIR не позволяет загружать внешние файлы JavaScript:

http://help.adobe.com/en_US/AIR/1.5/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7f0e.html#WS5b3ccc516d4fbf351e63e3d118666ade46-7ef7

Полагаю, один из вариантов - обойти их кросс-скриптингом и песочницей ...

...