Вот собственно идея возникла написать такое расширение, которое бы позволяло абсолютно на любой ссылке вызывать диалог сохранения ( где можно выбирать чем сохранять данную ссылку - chrome://mozapps/content/downloads/unknownContentType.xul ).

Собственно зачем? Объясню - например если я хочу передать страницу в стороннюю программу.

Конечно можно просто добавить пунктик в контекстное меню, но мне было бы удобно сделать это из того самого диалога.

Покопавшись в исходниках, нашел что реализация открытия этого диалога находится в nsHelperAppDlg.js и реализуется в интерфейсе nsUnknownContentTypeDialog. Вопрос только вот в чем - как им воспольозваться? Как показать этот диалог с нужным мне URL?


Может кто сталкивался? Меня устроит любой исходник или название расширения, которое в процессе своей работы вызывает данный диалог - остальное - дело техники :)

Заранее спасибо!

Извиняюсь, что не отвечаю на вопрос. Просто хочу заметить, что этот диалог сохранения и так не во всех случаях работает. Если вдруг у тебя что-нибудь выйдет, то, может, и этот баг получится заодно пофиксить? Было бы здорово.

Тема перенесена из форума «Firefox» в форум «Разработка».

Eggorka пишет

Извиняюсь, что не отвечаю на вопрос. Просто хочу заметить, что этот диалог сохранения и так не во всех случаях работает. Если вдруг у тебя что-нибудь выйдет, то, может, и этот баг получится заодно пофиксить? Было бы здорово.

Вот я именно и хочу сделать чтобы работало принудительно на ЛЮБЫХ ссылках. Будет чтото типа Save As Force :)

ionicman

ionicman пишет

Вот собственно идея возникла написать такое расширение, которое бы позволяло абсолютно на любой ссылке вызывать диалог сохранения ( где можно выбирать чем сохранять данную ссылку - chrome://mozapps/content/downloads/unknownContentType.xul ).

Собственно зачем? Объясню - например если я хочу передать страницу в стороннюю программу.

Наверное можно посмотреть в любом расширении, которое добавляет свои варианты сохранения: например расширения, устанавливаемые качалками, ну или тот же FlashGot ;)
А вообще мб проще добавить нужные приложения в список FlashGot?

07-10-2009 09:59:47
Кстати и расширения типа IE/OperaView тоже могут подойти.

Forest пишет

Наверное можно посмотреть в любом расширении, которое добавляет свои варианты сохранения: например расширения, устанавливаемые качалками, ну или тот же FlashGot ;)
А вообще мб проще добавить нужные приложения в список FlashGot?

Добавлено Сегодня 09:59:47
Кстати и расширения типа IE/OperaView тоже могут подойти.

Как добавить я знаю, это как раз не проблема, проблема ПРИНУДИТЕЛЬНО вызвать этот диалог и передать нужный мне URL.

Пункт контекстного меню «Сохранить объект как» работает примерно так:

Выделить код

Код:

document.popupNode = linkNode;
new nsContextMenu(
	document.getElementById("contentAreaContextMenu"),
	gBrowser
).saveLink();

Только при вызове из контекстного меню document.popupNode прописывается автоматически.
chrome://browser/content/nsContextMenu.js

И можно посмотреть, что вызывается при Alt+клик по ссылке (там по-другому, как ни странно):
chrome://browser/content/browser.js

Выделить код

Код:

function handleLinkClick(event, href, linkNode)
{
...
      if (event.altKey) {
        saveURL(href, linkNode ? gatherTextUnder(linkNode) : "", null, true,
                true, doc.documentURIObject);
        return true;
      }

Infocatcher, спасибо огромное. попробую поглядеть.
А я почемуто сознательно пропускал saveURL, потому как оно вроде выдает не диалог выбора чем сохранять а просто стандартное окно сохранения файла...

Хм, похоже, что и правда всегда без выбора.

А поиск по «chrome://mozapps/content/downloads/unknownContentType.xul» среди файлов установленного Firefox находит
Mozilla Firefox\components\nsHelperAppDlg.js

Выделить код

Код:

this.mDialog = ww.openWindow(dwi,
                                       "chrome://mozapps/content/downloads/unknownContentType.xul",
                                       null,
                                       "chrome,centerscreen,titlebar,dialog=yes,dependent",
                                       null);

Но там как-то хитро все.

Да, просто если открыть диалог - он открывается, но он естественно не работает, надо както юзать nsHelperAppDlg.js. Однако его использование или вызовы / порождения я не смог найти.