Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Вставка рекламы в swf (http://www.flasher.ru/forum/showthread.php?t=149516)

Astraport 26.01.2011 19:45

Вставка рекламы в swf
 
Решил добавить рекламный баннер. Приложение на flex 4. Рекомендуют вставлять так:

Код AS3:

var wide:SpesitBanner = new SpesitBanner(BannerType.WIDE);
        addChild(wide);

В результате пишет ошибку

TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать ru.spesit.ads.containers.vk::SpesitBanner@49cb849 в mx.core.IUIComponent.
atmx.core::Container/http://www.adobe.com/2006/flex/mx/internal::addingChild()
atmx.core::Container/addChildAt()
atmx.core::Container/addChild()

Пробовал и напрямую вставить, и через mx контейнер. Никак...
Сам этот SpesitBanner.as

Код AS3:

package ru.spesit.ads.containers.vk
{
        import flash.display.Loader;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.IOErrorEvent;
        import flash.net.URLRequest;
        import flash.system.ApplicationDomain;
        import flash.system.LoaderContext;
        import flash.system.Security;
        import flash.system.SecurityDomain;
 
        /**
        * Class SpesitBanner ...
        * @author Yuriy (Mur4ik) Kulkoff
        * @version 0.1
        * @date 06.10.2010
        */

        public class SpesitBanner extends Sprite
        {
                private var _type:String;
                private var _autoLoad:Boolean;
                private var _loadURL:String;
                private var _container:Loader;
 
                public function SpesitBanner(bannerType:String, autoLoadBanner:Boolean = true)
                {
                        Security.allowDomain("http://adv.spes-it.ru/");
 
                        _type = bannerType;
                        _autoLoad = autoLoadBanner;
 
                        mouseEnabled = false;
 
                        addEventListener(Event.ADDED_TO_STAGE, initInstance);
                }
 
                //=============================================================================
                //{region                                                        PUBLIC METHODS
                //=============================================================================
 
                public function loadBanner():void
                {
                        switch (_type)
                        {
                                case BannerType.WIDE:
                                        _loadURL = 'http://adv.spes-it.ru/swf/containers/vk_570x100.swf';
                                        break;
                                /*case BannerType.RICHMEDIA:
                                        _loadURL = 'http://adv.spes-it.ru/swf/containers/vk_430x200.swf';
                                        break;*/

                                case BannerType.VERTICAL:
                                        _loadURL = 'http://adv.spes-it.ru/swf/containers/vk_160x510.swf';
                                        break;
                                case BannerType.USUAL:
                                        _loadURL = 'http://adv.spes-it.ru/swf/containers/vk_430x190.swf';
                                        break;
 
                                default: trace("Неподдерживаемый тип баннера: " + _type);
                        }
 
                        _container = new Loader();
                        _container.contentLoaderInfo.addEventListener(Event.COMPLETE, banner_loadCompleteHandler);
                        _container.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, banner_loadErrorHandler);
 
                        try
                        {
                                _container.load(
                                        new URLRequest(_loadURL + "?spesit_pid=" +  PartnerConfig.PID + "&spesit_sid=" + PartnerConfig.SID),
                                        new LoaderContext(false, ApplicationDomain.currentDomain, SecurityDomain.currentDomain)
                                );
                        }
                        catch (err:Error)
                        {
                                trace("Local security warning!!! Boooo!");
 
                                _container.load(
                                        new URLRequest(_loadURL + "?spesit_pid=" +  PartnerConfig.PID + "&spesit_sid=" + PartnerConfig.SID),
                                        new LoaderContext(false, ApplicationDomain.currentDomain)
                                );
                        }
                }
 
                //} endregion PUBLIC METHODS ==================================================
 
 
                //=============================================================================
                //{region                                                PRIVATE/PROTECTED METHODS
                //=============================================================================
 
                private function initInstance(event:Event):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, initInstance);
 
                        if (_autoLoad) loadBanner();
                }
 
                private function checkSession():void
                {
 
                }
 
                //} endregion PRIVATE METHODS =================================================
 
 
                //=============================================================================
                //{region                                                        EVENTS HANDLERS
                //=============================================================================
 
                private function banner_loadErrorHandler(event:IOErrorEvent):void
                {
                        trace( "WideShell.banner_loadErrorHandler > event : " + event );
                }
 
                private function banner_loadCompleteHandler(event:Event):void
                {
                        addChild(_container.content);
                }
 
                //} endregion EVENTS HANDLERS =================================================
 
 
                //=============================================================================
                //{region                                                        GETTERS/SETTERS
                //=============================================================================
 
                //} endregion GETTERS/SETTERS =================================================
        }
}

Добавлено через 2 минуты
addElement тоже неработает
1067: Неявное приведение значения типа flash.display:Sprite к несоответствующему типу mx.core:IVisualElement

Добавлено через 1 час 3 минуты
Такой способ ошибки не вызывает, но баннера не видно.

Код AS3:

var ui:UIComponent = new UIComponent();
                                var advbanner:SpesitBanner = new SpesitBanner(BannerType.WIDE);
                                ui.addChild(advbanner);
                                ui.x = 95;
                                ui.y = 909;
                                this.addElement(ui);

Добавлено через 1 час 17 минут
Создал
Код AS3:

<s:SpriteVisualElement id="con" x="95" y="909" width="570" height="118"/>

И при инициализации приложения
Код AS3:

var advbanner:SpesitBanner = new SpesitBanner(BannerType.WIDE);
                                con.addChild(advbanner);

Ошибок и баннера - нет:(

nOobCrafter 27.01.2011 15:06

так же интересно решение данной проблемы, т.к. я разрабатывал аналогичную штуку на флеше, как ее использовать во флексе, без прямой адапции изнутри?

Mur4ik 28.01.2011 14:32

Попробуйте не использовать координаты и размеры. Широкий баннер сам подстраивается под размер приложения, и сам автоматом размещается внизу.

Либо посмотрите в метод loadBanner. И напрямую грузите swf по аналогии минуя обертку SpesitBanner.
Либо перепишите SpesitBanner унаследовав его не от Sprite, а от SpriteVisualElement или UIComponent или еще от чего либо подходящего.

addChild убран для spark контейнеров, для mx он по прежнему, вроде, в силе.


Часовой пояс GMT +4, время: 08:42.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.