Страницы: 1
Всем доброго времени суток
Учусь писать плагины
Сейчас пишу загрузчик музыки из 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)
Отсутствует
Подсказали код (спасибо 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)
Отсутствует
Вроде бы здесь есть какой-то ответ на проблему в виде сообщения "window is not defined". Пишется, что надо использовать nsIWindowMediator. Я бы попробовал заменить window (см. строку 4 в коде) на Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator)
Отсутствует
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); } }
Из локальных (под каждую страницу свой) скриптов обращался к функции так
Нужен аналогичный код для firefox
Отредактировано fireday2 (16-09-2014 20:59:24)
Отсутствует
Разобрался
Для общения между скриптами, например lib\main.js и data\my-script.js
используется "port"
Как это работает - https://developer.mozilla.org/en-US/Add … using_port
Отсутствует
Страницы: 1