Я пытаюсь настроить приложение AIR на основе HTML, которое позволяет пользователям сохранять (и в конечном итоге обмениваться) «закладками», которые указывают на файлы, и запускать их на своих компьютерах.Вся моя целевая аудитория будет использовать стандартные ноутбуки, выпущенные компанией, которые будут предварительно загружены коллекцией файлов HTML, которые будут открыты моим приложением.Все ноутбуки будут иметь одинаковые файлы в тех же местах, что немного упрощает проблему.
Мое приложение состоит из 2 HTML-страниц, между которыми пользователь может перемещаться: home.html и page.html.,Home.html - это целевая страница, на которой всего несколько кнопок.Каждая кнопка в home.html перемещает окно в page.html и передает параметр pageId.page.html использует параметр pageId, чтобы решить, какой узел анализировать из локально сохраненного файла JSON.
Моя цель - настроить прослушиватель событий InvokeEvent для запуска локально сохраненных файлов HTML из параметров, хранящихся в моем пользовательском файлетип.На данный момент тип файла называется .eref, и это просто текстовые файлы, содержащие путь к отдельной HTML-странице для запуска.Например, test.eref содержит одну строку: «file: /// C: /test.html».
У меня есть скрипт erefHandler.js, включенный в home.html и page.html.,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.Моя проблема в том, что InvokeEvents, запущенные test.eref, отправляются повторно каждый раз, когда отправляется любое InvokeEvent.Это происходит каждый раз, когда пользователь перемещается между home.html и page.html, так как file: /// C: /test.html перезапускается.Другими словами, двойной щелчок по test.eref запускает мое приложение и запускает файл: /// C: /test.html, как и предполагалось, но при переходе к page.html из home.html приложение запускает второй экземпляр файла: /// C: /test.html (и переход к home.html запускает третий экземпляр и т. Д.).
Может кто-нибудь помочь мне разобраться, как управлять / устранить этиОтправленные InvokeEvents?
Заранее спасибо!
-Зах