>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Метод saveURL() - не понятно, как переписать имя файла http://forum.mozilla-russia.org/viewtopic.php?id=11035 |
bassmandion > 21-06-2006 17:09:54 |
Пишу простенькое расширение для FireFox, есть проблема. При скачивании динамически выдаваемого скриптом файла с помощью saveURL(url, <по-нулям>), Download Manager в диалоге сохранения пишет в качестве имени файла имя скрипта (то-есть, нечто типа getfile.php). Каким образом можно заставить менеджера по-умолчанию выставить заданное имя файла с заданным расширением? Насколько я знаю, в качестве второго аргумента можно подсунуть какой-то хитрый объект с иформацией о пути и имени файла, но ничерта не выходит. Может есть какой-то обходной вариант, вообще не связанный с saveUEL? Но интересует именно возможность вызвать из JavaScript стандартный диалог сохранения файла. |
Unghost > 23-06-2006 00:56:06 |
Гм, а смотрели как это сделано в похожих расширениях, том же Flashgot например? |
bassmandion > 23-06-2006 03:44:29 |
Unghost пишет
Да, смотрел. Обычно такие качалки используют "путёвые" объекты, инициализируя их с заранее прописанным в .ini-файле путём. Далее они так или иначе берут имя файла и запихивают всё это в saveURL или подобный метод. Всё бы было хорошо, но хочется использовать просто последний каталог, куда сохранялись файлы менеджером. Кроме того, у меня какие-то непонятки с инициализацией. Например, initWithPath как-то не работает, ошибка выдаётся туманная и не понятно, в чем причина. |
Anton > 23-06-2006 15:37:27 |
bassmandion пишет
Подменить на время сохранения функцию 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, вот в неё можно (но (имхо) сложно).
Рискну предположить, что пишите в путях обратные слэши по одному (C:\path1\path2\...\pathN). Надо по два (C:\\path...).
Ничего особенного тут нет. Допустим, есть 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-архив - он как бы обычный каталог для инсталлятора. |
bassmandion > 24-06-2006 02:19:45 |
Anton Выделить код Код: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; }
Вот я так попробовал, у меня получилось такое дерево каталогов: chrome\ext_name\content\файлы. Однако при запуске FF собщил, что не может найти XUL-файл по этому пути. Впринципе, это не критично, но странно. |
Anton > 24-06-2006 11:13:08 |
bassmandion пишет
Видимо, где-то ошибка, так что ничего странного. Попробую изложить ещё раз. Выделить код Код: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 то нужно ещё изменить и его. |
bassmandion > 24-06-2006 13:38:11 |
Да, видимо тут и была ошибка, ибо я пытался править файлик прямо в каталоге с установленными расширениями. |
Microscope > 26-08-2008 14:22:46 |
Плз, помогите дожать дополнение File Title 1.3. Залез внутрь filetitleOverlay.xul, Заменил на установил в FF 3.0.3, сохраняет по-прежнему с расширением .htm, к имени файла добавляя .txt: filename.txt.htm Видимо, нужно подменить еще и функцию initFileInfo? Еще бы хотелось в первую строчку сохраняемого файла добавлять URL страницы, дату и время сохранения. (Ну еще чтоб золотая рыбка была на посылках... ) Если несложно, помогите. Или лучше попинайте по шагам и rtfm, чтоб до этого дошел бы я сам. Спасибо! |
Forest > 26-08-2008 15:13:07 |
Microscope . Удачи |
Microscope > 26-08-2008 15:52:33 |
Forest, спасибо за помощь, буду примерно знать, как отлаживать.
Именно 3-й, так как я видел его результат - 'File_Title.htm' я "превратил" (о я какой! - не ожидал, так как в Яве и xul с crome полный чай... начинающий) в 'File_Title.txt.htm' А вот насчет расширения файла. Погуглив getdefaultfilename, обнаружил эту тему и текст bassmandion пишет
Значит, расширением "управляет" initFileInfo. (Ну и насчет URL'а источника в первой строке сохраняемого файла.) |
Forest > 26-08-2008 16:30:05 |
Microscope
У меня у File Title содержимое не запаковано - так что файл лежит прямо в папке с расширением - можно прямо там и править (только бакап сделать). |
Shutnik > 29-08-2008 10:57:03 |
brusalv |
Microscope > 23-09-2008 15:09:39 |
Немного о сохранении URL в файле и буфере обмена - то, что нашел |