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

Общайтесь со знакомыми и друзьями в нашей группе в Контакте.

№110-09-2014 21:32:09

fireday2
Участник
 
Группа: Members
Зарегистрирован: 10-09-2014
Сообщений: 35
UA: Chrome 37.0

Как открыть стандартный диалог сохранения файла?

Всем доброго времени суток

Учусь писать плагины
Сейчас пишу загрузчик музыки из vk (для себя)

url файла и его имя есть, нужно открыть стандартный диалог сохранения файла
пытался сделать так

Выделить код

Код:

function download(url, name) {
    var link = document.createElement("a");
    link.download = name;
    link.href = url;
    link.click();
}

не работает
функция расположена в "myplugin\data\VKdownload.js"
вызов скрипта VKdownload идет из "myplugin\lib\main.js"

Выделить код

Код:

pageMod.PageMod({
    include: "https://vk.com/*",
    contentScriptFile: [self.data.url("jquery.js"), self.data.url("VKdownload.js")]
});

плагин собираю с помощью cfx
по этому туториалу https://developer.mozilla.org/en-US/Add … stallation , https://developer.mozilla.org/en-US/Add … ng_started

помогите открыть стандартный файловый диалог

Отредактировано fireday2 (16-09-2014 20:55:15)

Отсутствует

 

№216-09-2014 20:02:59

fireday2
Участник
 
Группа: Members
Зарегистрирован: 10-09-2014
Сообщений: 35
UA: Chrome 37.0

Re: Как открыть стандартный диалог сохранения файла?

Подсказали код (спасибо Michael72):

Выделить код

Код:

function InputFileName(filename='') {
    var utils = require('sdk/window/utils');
    var nsIFilePicker = Ci.nsIFilePicker; 
    var fp = Cc['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);    
    fp.init(utils.getMostRecentBrowserWindow(), 'Сохранить файл', nsIFilePicker.modeSave);
    fp.appendFilter('mp3','*.mp3');
    fp.defaultString = filename;
    var fp_result = fp.show();
    if (fp_result == nsIFilePicker.returnOK || fp_result == nsIFilePicker.returnReplace) {
        var path = fp.file.path;
        return path;
    }
    else if (fp_result == nsIFilePicker.returnCancel) {
        return 'cancel';
    }
    
}

Более подробно тут https://developer.mozilla.org/en-US/doc … FilePicker
там же подробности о фильтрах

// код тестировал в lib\main.js

Отредактировано fireday2 (24-09-2014 19:46:09)

Отсутствует

 

№316-09-2014 20:49:01

Michael72
Участник
 
Группа: Members
Откуда: Казахстан
Зарегистрирован: 21-02-2013
Сообщений: 25
UA: IE 11.0
Веб-сайт

Re: Как открыть стандартный диалог сохранения файла?

Вроде бы здесь есть какой-то ответ на проблему в виде сообщения "window is not defined". Пишется, что надо использовать nsIWindowMediator. Я бы попробовал заменить window (см. строку 4 в коде) на Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator)

Отсутствует

 

№416-09-2014 20:55:07

fireday2
Участник
 
Группа: Members
Зарегистрирован: 10-09-2014
Сообщений: 35
UA: Chrome 37.0

Re: Как открыть стандартный диалог сохранения файла?

Michael72, спасибо большое, разобрался с вызовом из main.js,
но в скриптах расположенных в "myplugin\data\" не открывает
Не срабатывает строка const {Cc} = require("chrome");
видимо ограничен круг видимости этих скриптов

Теперь вопрос: как вызвать функцию в "myplugin\lib\main.js" из скриптов расположенных в "myplugin\data\" ?

В плагинах под chromium была конструкция:
В скрипте бекграудна (с доступом к фичам браузера) была функция приемник:

Выделить код

Код:

chrome.extension.onRequest.addListener(function (request, sender, callback) {
    var action = request.action;
    if (action == 'download_from_vk') {
        chrome.downloads.download({ url: request.url, saveAs: false, filename: request.name });
        returnMessage(request.message);
    }
}

Из локальных (под каждую страницу свой) скриптов обращался к функции так

Выделить код

Код:

chrome.extension.sendRequest({action: 'download_from_vk', url: url, name: name});

Нужен аналогичный код для firefox

Отредактировано fireday2 (16-09-2014 20:59:24)

Отсутствует

 

№524-09-2014 19:40:03

fireday2
Участник
 
Группа: Members
Зарегистрирован: 10-09-2014
Сообщений: 35
UA: Chrome 37.0

Re: Как открыть стандартный диалог сохранения файла?

Разобрался

Для общения между скриптами, например lib\main.js и data\my-script.js
используется "port"
https://mdn.mozillademos.org/files/6543/content-scripting-events.png
Как это работает - https://developer.mozilla.org/en-US/Add … using_port

Отсутствует

 

Board footer

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