Полезная информация

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№121-06-2006 17:09:54

bassmandion
Участник
 
Группа: Extensions
Откуда: Москва
Зарегистрирован: 21-06-2006
Сообщений: 25
Веб-сайт

Метод saveURL() - не понятно, как переписать имя файла

Пишу простенькое расширение для FireFox, есть проблема.

При скачивании динамически выдаваемого скриптом файла с помощью saveURL(url, <по-нулям>), Download Manager в диалоге сохранения пишет в качестве имени файла имя скрипта (то-есть, нечто типа getfile.php).

Каким образом можно заставить менеджера по-умолчанию выставить заданное имя файла с заданным расширением?

Насколько я знаю, в качестве второго аргумента можно подсунуть какой-то хитрый объект с иформацией о пути и имени файла, но ничерта не выходит. Может есть какой-то обходной вариант, вообще не связанный с saveUEL? Но интересует именно возможность вызвать из JavaScript стандартный диалог сохранения файла.

Отсутствует

 

№223-06-2006 00:56:06

Unghost
Призрак-админ
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 08-10-2004
Сообщений: 11771

Re: Метод saveURL() - не понятно, как переписать имя файла

Гм, а смотрели как это сделано в похожих расширениях, том же Flashgot например?


Do not meddle in the affairs of Wizards, for they are subtle and quick to anger.

Отсутствует

 

№323-06-2006 03:44:29

bassmandion
Участник
 
Группа: Extensions
Откуда: Москва
Зарегистрирован: 21-06-2006
Сообщений: 25
Веб-сайт

Re: Метод saveURL() - не понятно, как переписать имя файла

Unghost пишет

Гм, а смотрели как это сделано в похожих расширениях, том же Flashgot например?

Да, смотрел. Обычно такие качалки используют "путёвые" объекты, инициализируя их с заранее прописанным в .ini-файле путём. Далее они так или иначе берут имя файла и запихивают всё это в saveURL или подобный метод. Всё бы было хорошо, но хочется использовать просто последний каталог, куда сохранялись файлы менеджером. Кроме того, у меня какие-то непонятки с инициализацией. Например, initWithPath как-то не работает, ошибка выдаётся туманная и не понятно, в чем причина.
Вопрос вдогонку: а есть вообще способы сделать такой описательный RDF-файл, чтобы код не приходилось запихивать в jar-архив?

Отсутствует

 

№423-06-2006 15:37:27

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: Метод saveURL() - не понятно, как переписать имя файла

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, вот в неё можно (но (имхо) сложно).

...
...у меня какие-то непонятки с инициализацией. Например, 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 и изменить строку

Выделить код

Код:

<Description about="urn:mozilla:extension:file:any_extension.jar">

так:

Выделить код

Код:

<Description about="urn:mozilla:extension:file:any_extension">

jar-архив - он как бы обычный каталог для инсталлятора.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№524-06-2006 02:19:45

bassmandion
Участник
 
Группа: Extensions
Откуда: Москва
Зарегистрирован: 21-06-2006
Сообщений: 25
Веб-сайт

Re: Метод saveURL() - не понятно, как переписать имя файла

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-файл по этому пути. Впринципе, это не критично, но странно.

Отсутствует

 

№624-06-2006 11:13:08

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: Метод saveURL() - не понятно, как переписать имя файла

bassmandion пишет

...

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ентов на части порвет !!!

Отсутствует

 

№724-06-2006 13:38:11

bassmandion
Участник
 
Группа: Extensions
Откуда: Москва
Зарегистрирован: 21-06-2006
Сообщений: 25
Веб-сайт

Re: Метод saveURL() - не понятно, как переписать имя файла

Если рядом с install.rdf имеется chrome.manifest

Да, видимо тут и была ошибка, ибо я пытался править файлик прямо в каталоге с установленными расширениями.

Отсутствует

 

№826-08-2008 14:22:46

Microscope
Участник
 
Группа: Members
Зарегистрирован: 07-09-2007
Сообщений: 69
UA: Firefox 3.0

Re: Метод saveURL() - не понятно, как переписать имя файла

Плз, помогите дожать дополнение File Title 1.3.
При сохранении страницы в txt подставляет расширение .htm вместо .txt

Залез внутрь filetitleOverlay.xul,

Выделить код

Код:

if (docTitle) {
      // 3) Use the document title
      return docTitle";

Заменил на

Выделить код

Код:

if (docTitle) {
      // 3) Use the document title
      return docTitle + ".txt";

установил в FF 3.0.3, сохраняет по-прежнему с расширением .htm, к имени файла добавляя .txt: filename.txt.htm

Видимо, нужно подменить еще и функцию initFileInfo?
"Сами мы не местные" (пока не очень понимаю), подскажите, как при сохранении в текстовом формате добавлять расширение .txt вместо .htm

Еще бы хотелось в первую строчку сохраняемого файла добавлять URL страницы, дату и время сохранения. (Ну еще чтоб золотая рыбка была на посылках... :|)

Если несложно, помогите. Или лучше попинайте по шагам и rtfm, чтоб до этого дошел бы я сам.

Спасибо!

Отсутствует

 

№926-08-2008 15:13:07

Forest
Участник
 
Группа: Members
Откуда: Обнинск
Зарегистрирован: 05-04-2005
Сообщений: 1778
UA: Firefox 3.0

Re: Метод saveURL() - не понятно, как переписать имя файла

Microscope
Надо братьи отлаживать - совершенно не факт, что именно 3-й пункт срабатывает.
Запускайте браузер с параметром -console - откроется второе окно с консолью, куда можно выводить сообщения с помощью

Выделить код

Код:

dump("сообщение\n");

.
Хотя в таком простом случае можно и alert-ами обойтись.

Удачи :)


---  ---

Отсутствует

 

№1026-08-2008 15:52:33

Microscope
Участник
 
Группа: Members
Зарегистрирован: 07-09-2007
Сообщений: 69
UA: Firefox 3.0

Re: Метод saveURL() - не понятно, как переписать имя файла

Forest, спасибо за помощь, буду примерно знать, как отлаживать.
А как менять код плагина, не переустанавливая?

- совершенно не факт, что именно 3-й пункт срабатывает.

Именно 3-й, так как я видел его результат - 'File_Title.htm' я "превратил" (о я какой! - не ожидал, так как в Яве и xul с crome полный чай... начинающий) в 'File_Title.txt.htm'

А вот насчет расширения файла. Погуглив getdefaultfilename, обнаружил эту тему и текст

bassmandion пишет

в имя в конце добавляется .htm. (это видно в вункции initFileInfo)

Значит, расширением "управляет" initFileInfo.
Как ее заменить, чтобы добавлять правильное расширение, где  ее найти?

(Ну и насчет URL'а источника в первой строке сохраняемого файла.)

Отсутствует

 

№1126-08-2008 16:30:05

Forest
Участник
 
Группа: Members
Откуда: Обнинск
Зарегистрирован: 05-04-2005
Сообщений: 1778
UA: Firefox 3.0

Re: Метод saveURL() - не понятно, как переписать имя файла

Microscope

А как менять код плагина, не переустанавливая?

У меня у File Title содержимое не запаковано - так что файл лежит прямо в папке с расширением - можно прямо там и править (только бакап сделать).
Возможно надо будет еще с ключиками побаловаться - можно посмотреть здесь.


---  ---

Отсутствует

 

№1229-08-2008 10:57:03

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785
UA: Iceweasel 3.0

Re: Метод saveURL() - не понятно, как переписать имя файла

brusalv
вопрос не там задаёте, но создать ссылку на страницу можно перетаскиванием иконки сайта на рабочий стол

Отсутствует

 

№1323-09-2008 15:09:39

Microscope
Участник
 
Группа: Members
Зарегистрирован: 07-09-2007
Сообщений: 69
UA: Firefox 3.0

Re: Метод saveURL() - не понятно, как переписать имя файла

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]