actionscript-3stagewebview

as3 StageWebView in a class not displaying


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!!!");

        }

        /// 
    }
}

Solution

  • 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.