2014-06-14 4 views
0

나는 이것이 쉬운 것임을 확신합니다. 하나의 Main.as 클래스에서 StageWebView를로드하는 다른 클래스를 호출합니다. 그 자체로 호출되면 StageWebView는 제대로 작동하지만 다른 클래스에서 호출하면 표시되지 않습니다. 무슨 간단한 일을 잊어 버리는거야?as3 클래스의 StageWebView가 표시되지 않습니다.

아마도로드 된 클래스의 "스테이지"와 관련이 있습니까?

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

자네 말이 맞아, 무대가 PopeNews 생성자 null입니다. 초기화 코드를 새 메소드에 넣고 ADDED_TO_STAGE 이벤트를 수신해야합니다.

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); 
} 

또한, 클래스 이름은 대문자로 표기됩니다.

+0

감사합니다. Sean! 나는 항상 명명 규칙에 대해 궁금해했다. 작은 가이드에 대한 제안? 고마워요 –

+0

* 유형 지정 이름 * 및 * 인수 이름 * 사이의 섹션은 여기 좋다고 생각합니다 : http://sourceforge.net/adobe/flexsdk/wiki/Coding%20Conventions/ –