Страницы: 1
Пишу простенькое расширение для FireFox, есть проблема.
При скачивании динамически выдаваемого скриптом файла с помощью saveURL(url, <по-нулям>), Download Manager в диалоге сохранения пишет в качестве имени файла имя скрипта (то-есть, нечто типа getfile.php).
Каким образом можно заставить менеджера по-умолчанию выставить заданное имя файла с заданным расширением?
Насколько я знаю, в качестве второго аргумента можно подсунуть какой-то хитрый объект с иформацией о пути и имени файла, но ничерта не выходит. Может есть какой-то обходной вариант, вообще не связанный с saveUEL? Но интересует именно возможность вызвать из JavaScript стандартный диалог сохранения файла.
Отсутствует
Гм, а смотрели как это сделано в похожих расширениях, том же Flashgot например?
Do not meddle in the affairs of Wizards, for they are subtle and quick to anger.
Отсутствует
Гм, а смотрели как это сделано в похожих расширениях, том же Flashgot например?
Да, смотрел. Обычно такие качалки используют "путёвые" объекты, инициализируя их с заранее прописанным в .ini-файле путём. Далее они так или иначе берут имя файла и запихивают всё это в saveURL или подобный метод. Всё бы было хорошо, но хочется использовать просто последний каталог, куда сохранялись файлы менеджером. Кроме того, у меня какие-то непонятки с инициализацией. Например, initWithPath как-то не работает, ошибка выдаётся туманная и не понятно, в чем причина.
Вопрос вдогонку: а есть вообще способы сделать такой описательный RDF-файл, чтобы код не приходилось запихивать в jar-архив?
Отсутствует
...
Каким образом можно заставить менеджера по-умолчанию выставить заданное имя файла с заданным расширением?
...
Подменить на время сохранения функцию getDefaultFileName:
function mySave (addr, name) { var ogdfn = getDefaultFileName; getDefaultFileName = function (a, b, c, d) { return validateFileName (name); } saveURL (addr, "", "", false, false, makeURI (addr)); getDefaultFileName = ogdfn; }
...
Насколько я знаю, в качестве второго аргумента можно подсунуть какой-то хитрый объект с иформацией о пути и имени файла, но ничерта не выходит...
Насколько я смог разобраться в коде contentAreaUtils.js, второй аргумент saveURL - только строка. saveURL является "оболочкой" для internalSave, вот в неё можно (но (имхо) сложно).
...
...у меня какие-то непонятки с инициализацией. Например, initWithPath как-то не работает, ошибка выдаётся туманная и не понятно, в чем причина...
Рискну предположить, что пишите в путях обратные слэши по одному (C:\path1\path2\...\pathN). Надо по два (C:\\path...).
...есть вообще способы сделать такой описательный RDF-файл, чтобы код не приходилось запихивать в jar-архив?
Ничего особенного тут нет. Допустим, есть any_extension.jar и install.rdf:
<em:file> <Description about="urn:mozilla:extension:file:any_extension.jar"> <em:package>content/any_extension/</em:package> <em:locale>locale/en-US/any_extension/</em:locale> <em:locale>locale/ru-RU/any_extension/</em:locale> <em:skin>skin/classic/</em:skin> <em:skin>skin/skin2/</em:skin> <em:skin>skin/skin3/</em:skin> </Description> </em:file>
Можно сделать каталог any_extension с содержимым any_extension.jar и изменить строку
так:
jar-архив - он как бы обычный каталог для инсталлятора.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
Спасибо за наводку, я покопался в том же файле и выяснил, что он работает чуть поинтереснее и как раз в моём случае в имя в конце добавляется .htm. (это видно в вункции initFileInfo) Зато уже гарантированно работает вот такой:
function mySave (addr, name, ext) { var ifi = initFileInfo; initFileInfo = function(aFI, aURL, aDocument, aContentType, aContentDisposition) { aFI.uri = makeURI(addr); aFI.fileName = name; aFI.fileExt = ext; aFI.fileBaseName = name; } saveURL (addr, "", "", false, false, makeURI(addr)); initFileInfo = ifi; }
jar-архив - он как бы обычный каталог для инсталлятора.
Вот я так попробовал, у меня получилось такое дерево каталогов: chrome\ext_name\content\файлы. Однако при запуске FF собщил, что не может найти XUL-файл по этому пути. Впринципе, это не критично, но странно.
Отсутствует
...
jar-архив - он как бы обычный каталог для инсталлятора.
Вот я так попробовал, у меня получилось такое дерево каталогов: chrome\ext_name\content\файлы. Однако при запуске FF собщил, что не может найти XUL-файл по этому пути. Впринципе, это не критично, но странно.
Видимо, где-то ошибка, так что ничего странного. Попробую изложить ещё раз.
Допустим, есть рабочее расширение с примерно такой:
install.rdf <файл> chrome <каталог> any_ext.jar <jar-каталог> content <каталог> skin <каталог> locale <каталог>
структурой. Чтобы избавиться от jar-файла, нужно как указывалось выше убрать '.jar' из install.rdf и чуть изменить имеющуюся структуру каталогов, вот так:
install.rdf <файл> chrome <каталог> any_ext <каталог> content <каталог> skin <каталог> locale <каталог>
Если рядом с install.rdf имеется chrome.manifest то нужно ещё изменить и его.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Если рядом с install.rdf имеется chrome.manifest
Да, видимо тут и была ошибка, ибо я пытался править файлик прямо в каталоге с установленными расширениями.
Отсутствует
Плз, помогите дожать дополнение File Title 1.3.
При сохранении страницы в txt подставляет расширение .htm вместо .txt
Залез внутрь filetitleOverlay.xul,
Заменил на
установил в FF 3.0.3, сохраняет по-прежнему с расширением .htm, к имени файла добавляя .txt: filename.txt.htm
Видимо, нужно подменить еще и функцию initFileInfo?
"Сами мы не местные" (пока не очень понимаю), подскажите, как при сохранении в текстовом формате добавлять расширение .txt вместо .htm
Еще бы хотелось в первую строчку сохраняемого файла добавлять URL страницы, дату и время сохранения. (Ну еще чтоб золотая рыбка была на посылках... )
Если несложно, помогите. Или лучше попинайте по шагам и rtfm, чтоб до этого дошел бы я сам.
Спасибо!
Отсутствует
Microscope
Надо братьи отлаживать - совершенно не факт, что именно 3-й пункт срабатывает.
Запускайте браузер с параметром -console - откроется второе окно с консолью, куда можно выводить сообщения с помощью
.
Хотя в таком простом случае можно и alert-ами обойтись.
Удачи
--- ---
Отсутствует
Forest, спасибо за помощь, буду примерно знать, как отлаживать.
А как менять код плагина, не переустанавливая?
- совершенно не факт, что именно 3-й пункт срабатывает.
Именно 3-й, так как я видел его результат - 'File_Title.htm' я "превратил" (о я какой! - не ожидал, так как в Яве и xul с crome полный чай... начинающий) в 'File_Title.txt.htm'
А вот насчет расширения файла. Погуглив getdefaultfilename, обнаружил эту тему и текст
в имя в конце добавляется .htm. (это видно в вункции initFileInfo)
Значит, расширением "управляет" initFileInfo.
Как ее заменить, чтобы добавлять правильное расширение, где ее найти?
(Ну и насчет URL'а источника в первой строке сохраняемого файла.)
Отсутствует
Microscope
А как менять код плагина, не переустанавливая?
У меня у File Title содержимое не запаковано - так что файл лежит прямо в папке с расширением - можно прямо там и править (только бакап сделать).
Возможно надо будет еще с ключиками побаловаться - можно посмотреть здесь.
--- ---
Отсутствует
Отсутствует
Страницы: 1