2011-08-15 1 views
0

사용자가 컴퓨터에서 파일을 가리키고 실행하는 "책갈피"를 저장하고 궁극적으로 공유 할 수있는 HTML 기반 AIR 응용 프로그램을 설정하려고합니다. 내 모든 대상 고객은 내 회사의 응용 프로그램이 열도록 설계된 HTML 파일 모음이 사전로드 된 회사 표준 랩톱을 사용할 것입니다. 모든 랩톱은 동일한 위치에 동일한 파일을 가지므로 문제가 좀더 단순 해집니다.프로그램 실행 중에 다시 전달되는 Adobe AIR InvokeEvent 이벤트는 어떻게 관리합니까?

내 응용 프로그램은 사용자가 home.html과 page.html 사이를 탐색 할 수있는 2 개의 HTML 페이지로 구성됩니다. Home.html은 방문 페이지이며 버튼이 몇 개 있습니다. home.html의 각 버튼은 창을 page.html로 이동하고 pageId 매개 변수를 전달합니다. page.html은 pageId 매개 변수를 사용하여 로컬에 저장된 JSON 파일에서 구문 분석 할 노드를 결정합니다.

내 목표는 내 사용자 정의 파일 형식에 저장된 매개 변수에서 로컬로 저장된 HTML 파일을 시작하도록 InvokeEvent 이벤트 수신기를 구성하는 것입니다. 지금은 파일 유형이 .eref이며, 실행하려는 단일 HTML 페이지에 대한 경로가 포함 된 단순한 텍스트 파일입니다. 예를 들어, test.eref에는 "file : /// C : /test.html"이라는 한 줄이 있습니다.

저는 home.html과 page.html에 모두 포함 된 스크립트 erefHandler.js가 있습니다. erefHandler.js는 다음과 같습니다.

if (air != undefined) { 
    air.NativeApplication.nativeApplication.addEventListener(air.InvokeEvent.INVOKE, onInvoke); 
} 

function onInvoke(e) { 
    if(e.arguments.length == 1) { 
     var file = new air.File(e.arguments); 
     if(file.exists) { 
      var fileStream = new air.FileStream(); 
      var byteData = new air.ByteArray(); 
      fileStream.open(file, air.FileMode.READ); 
      fileStream.readBytes(byteData, 0, file.size); 
      fileStream.close(); 

      if(byteData.length > 0) { 
       var s = byteData.readUTFBytes(byteData.length); 
       var parser=new DOMParser(); 
       var doc=parser.parseFromString(s,"text/plain"); 

       window.open(s, '_blank', 'width=910, height=700, menubar=no, toolbar=no, resizable=yes'); 

      } 
     } 
    } 
} 

처음에는 test.eref를 두 번 클릭하면 큰 효과를 볼 수 있습니다. 내 문제는 test.eref에 의해 발생 된 InvokeEvents가 InvokeEvent가 전달 될 때마다 다시 전달된다는 것입니다. 이것은 file : /// C : /test.html relaunches 이후 사용자가 home.html과 page.html 사이를 이동할 때마다 발생하는 것으로 보입니다. 즉, test.eref를 두 번 클릭하면 응용 프로그램이 시작되고 file : /// C : /test.html이 시작되지만 home.html에서 page.html로 이동하면 응용 프로그램은 file의 두 번째 인스턴스를 시작합니다 : /// C : /test.html (그리고 home.html로 돌아가서 세 번째 인스턴스를 시작하는 등 ...).

아무도 내가 이러한 재발송 된 InvokeEvents를 관리/제거하는 방법을 알아낼 수 있습니까?

미리 감사드립니다. 사용자가 launchApplication 수행하고 응용 프로그램이 현재 열려 있지 않은 때마다

-Zach

답변

1

Invoke 트리거됩니다. 과거를 지나갈 수있는 유일한 방법은 전달한 인수/flashvars를 기반으로 AIR 파일을 숨기는 것입니다. 희망이 도움이됩니다.