2013-10-03 1 views
0

플렉스 애플리케이션 도구와 브라우저 앞/뒤로 버튼 간의 동기화에 BrowserManager 클래스를 사용하는 플렉스 애플리케이션 도구를 작성했습니다. Firefox에서는 잘 작동하지만 다른 브라우저 (Safari, IE, Chrome)에서는 제대로 작동하지 않았습니다.플렉스 애플리케이션 도구와 브라우저 앞뒤 버튼을 동기화하는 방법이 있습니까?

코드 folow과 같습니다

<?xml version="1.0" encoding="utf-8"?> 
    <mx:Application 
     xmlns:mx="http://www.adobe.com/2006/mxml" 
     layout="absolute" 
     historyManagementEnabled="false" 
     creationComplete="onCreationComplete()"> 

     <mx:Script> 
      <![CDATA[ 
       import mx.effects.effectClasses.AddRemoveEffectTargetFilter; 
       import mx.events.BrowserChangeEvent; 
       import mx.managers.IBrowserManager; 
       import mx.managers.BrowserManager; 
       import mx.utils.URLUtil; 

       private var bm:IBrowserManager; 

       private function onCreationComplete() : void 
       { 
        bm = BrowserManager.getInstance(); //get an instance of the browserManager 
        bm.init(); //initialize the browser manager 
        updateContainers(); //set visible containers based on url parameters 
        bm.addEventListener(BrowserChangeEvent.BROWSER_URL_CHANGE, onURLChange);  //add event listeners to handle back/forward browser buttons 
       updateURL(); 
       } 

      private function updateContainers():void 
      { 
       var o:Object = URLUtil.stringToObject(bm.fragment); 
       if (!isNaN(o.selectedIndex)) 
       { 
        var newIndex : Number = o.selectedIndex; 
        if (newIndex >= 0 && newIndex < tabNav.numChildren) 
         tabNav.selectedIndex = newIndex; 
       } 
      } 

      private function onURLChange(event:BrowserChangeEvent):void 
      { 
       updateContainers(); 
      } 

      private function updateURL():void 
      { 
       bm.setFragment("selectedIndex=" + tabNav.selectedIndex); 
      } 

     ]]> 
    </mx:Script> 

<mx:TabNavigator 
     bottom="10" 
     top="10" 
     right="10" 
     left="10" 
     id="tabNav" 
     historyManagementEnabled="false" 
     > 

     <mx:Canvas label="Tab 0" show="updateURL()" > 
      <mx:Label text="Tab 0 Contents" /> 
     </mx:Canvas> 

     <mx:Canvas label="Tab 1" show="updateURL()" > 
      <mx:Label text="Tab 1 Contents" /> 
     </mx:Canvas> 

     <mx:Canvas label="Tab 2" show="updateURL()" > 
      <mx:Label text="Tab 2 Contents" /> 
     </mx:Canvas> 

    </mx:TabNavigator> 
</mx:Application> 

Is there any solution for this problem...? 
+1

자세히 알려주십시오. 무슨 일 이니? 이 문제를 해결하려고 시도한 것을 게시 할 수 있습니까? –

+0

나는 BrowserManager 클래스를 사용하여 브라우저 기록을 관리하는 애플리케이션을 만들었습니다. 이 응용 프로그램은 fire fox에서는 제대로 작동하지만 크롬, 사파리 및 IE에서는 제대로 작동하지 않습니다. 이 브라우저에서 응용 프로그램을 제대로 실행하려면 어떻게해야합니까? – Shaun

답변

0

내가 내 자신의 질문의 답을 가지고있다. 당신이 swfaddress.js이있을 때

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute" 
    historyManagementEnabled="false" 
    creationComplete="onCreationComplete()"> 

    <mx:Script> 
     <![CDATA[ 
      import com.asual.swfaddress.SWFAddressEvent; 
      import com.asual.swfaddress.SWFAddress; 
      import mx.effects.effectClasses.AddRemoveEffectTargetFilter; 
      import mx.events.BrowserChangeEvent; 
      import mx.managers.IBrowserManager; 
      import mx.managers.BrowserManager; 
      import mx.utils.URLUtil; 
      import com.asual.swfaddress.*; 

      private var bm:IBrowserManager; 

      private function onCreationComplete() : void 
      { 
       SWFAddress.addEventListener(SWFAddressEvent.CHANGE, onChange); 
      } 

      private function onChange(e:SWFAddressEvent):void 
      { 
       if(e.value != "/") 
        SWFAddress.setTitle("Nail Designer " + e.value.substring(1)); 
       else 
        SWFAddress.setTitle("Nail Designer - Tab1Selected "); 

       switch(e.value) 
       { 
        case "/Tab1Selected": 
         tabNav.selectedIndex = 0; 
         break; 

        case "/Tab2Selected": 
         tabNav.selectedIndex = 1; 
         break; 

        case "/Tab3Selected": 
         tabNav.selectedIndex = 2; 
         break; 

        case "/": 
         tabNav.selectedIndex = 0; 
         break; 
       } 
      } 

      public function onCanvas_Click():void 
      { 
       if(tabNav.selectedIndex == 0) 
        SWFAddress.setValue("Tab1Selected"); 
       else if(tabNav.selectedIndex == 1) 
        SWFAddress.setValue("Tab2Selected"); 
       else if(tabNav.selectedIndex == 2) 
        SWFAddress.setValue("Tab3Selected");  
      } 

    ]]> 
    </mx:Script> 

    <mx:TabNavigator 
     bottom="10" 
     top="10" 
     right="10" 
     left="10" 
     id="tabNav" 
     historyManagementEnabled="false" 
     > 

     <mx:Canvas label="Tab 1" show="onCanvas_Click()" > 
      <mx:Label text="Tab 0 Contents" /> 
     </mx:Canvas> 

     <mx:Canvas label="Tab 2" show="onCanvas_Click()" > 
      <mx:Label text="Tab 1 Contents" /> 
     </mx:Canvas> 

     <mx:Canvas label="Tab 3" show="onCanvas_Click()" > 
      <mx:Label text="Tab 2 Contents" /> 
     </mx:Canvas> 

    </mx:TabNavigator> 
</mx:Application> 

이 코드는 실행 파일과 SWFAddress.as, SWFAddressEvent.as 클래스를 swfobject.js : 코드는 다음과 같다. 이 파일을 다운로드하면 fron 링크를 다운로드 할 수 있습니다 : http://www.asual.com/swfaddress/

관련 문제