Вот есть такое во мне. Страшно не люблю огромные простыни кода. И где есть возможность - делю его на отдельные файлы. Вот и для скриптов на iMacros я искал возможность отделить часть функций и прототипов от основного скрипта, дабы не мешались под ногами. Одна проблема - загрузить их потом во время выполнения. Поиск по JS выдает кучу информации, но только связанной с разработкой веб-страниц или плагинов. Но это не сломило меня и я нашел таки решение проблемы. Первым вариантом было нечто очень нагруженное вызовами и... Да что рассказывать, вот оно:
Код
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("c:\\path\\to\\file\\myscript.js"); // <-- имя файла тут
var scriptURI = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService).getProtocolHandler("file")
.QueryInterface(Components.interfaces.nsIFileProtocolHandler)
.getURLSpecFromFile(file);
Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
.getService(Components.interfaces.mozIJSSubScriptLoader)
.loadSubScript(scriptURI);
Перебор, но оно работает. Правда потом откопалось более изящное и простое решение:
Код
Components.classes["@mozilla.org/moz/jssubscript-loader;1"]
.getService(Components.interfaces.mozIJSSubScriptLoader)
.loadSubScript("file:///c:/path/to/file/myscript.js");
Прошу любить и жаловать. А заодно и пользоваться. Правда осталось еще 2 проблемы, к которым я пока не смог найти решения. Во-первых, это любовь ФФ к кешированию всего и вся. Увы, но малейшие изменение прицепляемого файла требует перезагрузки браузера. Иначе изменение просто не будет учтено. Файл будет получен из кеша... Ну и во-вторых, я пока не смог изнутри скрипта определить папку, из которой он был запущен. То есть, надо пока жестко прописывать пути ко всем файлам. И любое перемещение скрипта требует его правки в области основных настроек. Хотя, если взять за правило в отдельных файлах держать только прототипы, которые используются в 2х и более скриптах, то имеет смысл для них просто завести отдельную папку и ссылаться на нее.
К слову, один подобный прототип я опубликую в течении пары дней, в качестве замены несколько устаревшей статьи. В нем будет учтен мой прогресс в изучении JS и... ну и что-то еще. Это точно.