사용자가 컴퓨터에서 파일을 가리키고 실행하는 "책갈피"를 저장하고 궁극적으로 공유 할 수있는 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