as3 StageWebView in a class not displaying

586 Views Asked by At

I am sure this is an easy one. I have one Main.as class calling a another class that is loading a StageWebView. If called by itself the StageWebView works fine, but when I call it from another class it will not display. What simple thing am I forgetting?

Perhaps it has something to do with the "stage" in the loaded class?

Main.as

public function addPopeNews()
    {
    thePopeNews = new popeNews();
    addChild(thePopeNews);      
    }

PopeNews.as

package com
{

    import flash.display.MovieClip;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.*;
    import flash.net.URLRequest;
    import flash.media.StageWebView;
    import flash.geom.Rectangle;

    public class popeNews extends MovieClip
    {


        public var backBar:popeNewsBar;
        public var webView:StageWebView;

        public function popeNews()
        {

        webView=new StageWebView();
        webView.stage = this.stage;



        webView.loadURL("www.myUrl.com");
        trace("POPE NEWS!!!"); /// trace works! 


        backBar = new popeNewsBar();
        backBar.width = Main._screenX;
        backBar.scaleY = backBar.scaleX;

        webView.addEventListener(Event.COMPLETE, webLoaded);
            webView.addEventListener(LocationChangeEvent.LOCATION_CHANGING,onChanging);


        }

        public function webLoaded(e:Event)
        {
            trace("web loaded"); // trace works!!

            if (webView.isHistoryBackEnabled)
            {
            addChild(backBar);
            backBar.bb.addEventListener(MouseEvent.CLICK, goBack);
            webView.viewPort = new Rectangle(0,backBar.height,Main._screenX,Main._screenY - backBar.height);
            }
            else
            {
                webView.viewPort = new Rectangle(0,0,Main._screenX,Main._screenY);
            }
        }

        public function goBack(e:Event)
        {
            if (webView.isHistoryBackEnabled)
            {
                trace("Called GO BACK");
                webView.historyBack();
                removeChild(backBar);
                backBar.bb.removeEventListener(MouseEvent.CLICK, goBack);
                return;
            }

            if (webView.isHistoryForwardEnabled)
            {
                webView.historyForward();
                return;
            }
        }

        public function onError(e:ErrorEvent):void
        {
            //infoBox.text="Page is not available. Try reloading.";
        }

        public function onChanging(e:LocationChangeEvent):void
        {

            //webView.viewPort = null;
            trace("Called CHANGING!!!");

        }

        /// 
    }
}
1

There are 1 best solutions below

2
On BEST ANSWER

You are right, the stage is null in the PopeNews constructor. You should put your initialization code into a new method, and listen for the ADDED_TO_STAGE event.

public function popeNews()
{
    addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
}

private function addedToStageHandler(ev:Event):void
{

    webView=new StageWebView();
    webView.stage = this.stage;

    webView.loadURL("www.myUrl.com");
    trace("POPE NEWS!!!"); /// trace works! 

    backBar = new popeNewsBar();
    backBar.width = Main._screenX;
    backBar.scaleY = backBar.scaleX;

    webView.addEventListener(Event.COMPLETE, webLoaded);
    webView.addEventListener(LocationChangeEvent.LOCATION_CHANGING,onChanging);
}

Also, by convention class names are capitalized.