Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Расширения для Firefox/Mozilla Firefox Extensions (часть 9)

Модерирует : gyra, Maz

Maz (02-04-2019 17:51): Переезжаем: Расширения для Firefox/Mozilla Firefox Extensions (часть 10)  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

nfmzkvmx



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код для секции "Инициализация"

Код:
(async () => {
    'use strict';
    let filePath = '', // Путь к запускаемому файлу, в виде: C:\\example-dir\\hstart.exe
                       // или OS.Path.join(OS.Constants.Path.profileDir, 'example-dir', 'hstart.exe') - чтобы получить путь к файлу в заданной папке профиля браузера
                       // Если путь к запускаемому файлу не задан, то файл будет создан по пути: %BROWSERPROFILE%\tools\example.bat
                       // из текста во вкладке Справка этой кнопки,
                       // с заменой в нем %dlFilePath% и %dlFileName% на полученный путь и название загруженного файла
        dlFilePath,
        dlFileName,
        args = [], // аргументы запуска, примеры:
                   // ["%dlFilePath%", "%dlFileName%"]
                   // ["/ELEVATE", "/NOUAC", "/NOCONSOLE", "example.exe \"%dlFilePath%\" \"%dlFileName%\""]
                   // %dlFilePath% и %dlFileName% - будут заменены на полученные путь и имя загруженного файла
        convertToUnicode = false; // Создать фвйл из текста вкладки Справка в UTF-8 или, если false, с конвертацией в CP-1251
    const o = {// https://github.com/Infocatcher/Private_Tab/issues/228#issuecomment-238963363
              get windows() {
                  return (function*() {
                      const ws = Services.wm.getEnumerator("navigator:browser");
                      while(ws.hasMoreElements())
                          yield ws.getNext();
                  })()
              }
          },
          isHndlr = () => [...o.windows].some(win => win.dlHndlr),
          convertFromUnicode = (chr, str) => {
              const converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
              converter.charset = chr;
              return converter.ConvertFromUnicode(str);
          },
          writeToFile = async (str, path) => {
              if (convertToUnicode) {
                  const enc = new TextEncoder(),
                        arr = enc.encode(str);
                  return OS.File.writeAtomic(path, arr);
              }
              else
                  return custombuttonsUtils.writeFile(path, convertFromUnicode('CP1251', str));
          },
          openFile = async (path) => {
              if (path && await exists(path)) {
                  const file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile),
                        process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
                  file.initWithPath(path);
                  process.init(file);
                  const argss = args.map(el => {
                      if (el.indexOf('%dlFilePath%') != -1)
                          el = el.replace('%dlFilePath%', dlFilePath);
                      if (el.indexOf('%dlFileName%') != -1)
                          el = el.replace('%dlFileName%', dlFileName);
                      return convertFromUnicode('CP1251', el)
                  });
                  process.run(false, argss, argss.length);
              }
              else {
                  path = await createFile();
                  const file = new FileUtils.File(path);
                  file.launch();
              }
          },
          exists = async (path) => OS.File.exists(path),
          makePath = (arr) => OS.Path.join(...arr),
          createFile = async () => {
              // Создаем директорию и файл в папке профиля браузера, если путь выше не задан
              const profDir = OS.Constants.Path.profileDir,
                    dirName = 'tools', // название папки
                    fileName = 'example.bat', // название и расширение файла
                    pathToDir = makePath([profDir, dirName]),
                    pathToFile = makePath([profDir, dirName, fileName]),
                    // Берем текст файла из вкладки Справка и меняем в нем %dlFilePath% и %dlFileName% на полученный путь и название загруженного файла --->
                    fileText = this.Help.replace('%dlFilePath%', dlFilePath).replace('%dlFileName%', dlFileName);
              !(await exists(pathToDir)) && await OS.File.makeDir(pathToDir); // Создать директорию, если не существует
              await writeToFile(fileText, pathToFile); // Создать файл
              return pathToFile
          },
          // хендлер на загрузках --->
          listener = dl => {
              if (!dl.succeeded) return;
              dlFilePath = dl.target.path;
              dlFileName = dl.target.path.match(/[^\\]+$/)[0];
              list.remove(dl);
              // Запускаем файл при успешном окончании загрузки файла --->
              openFile(filePath);
          },
          list = await Downloads.getList(Downloads.ALL),
          view = { onDownloadChanged: listener },
          pref = 'CB.handle-download-end', // Название параметра в about:config, в которую записывается состояние кнопки
          // Обсервер на параметре about:config, вкл./выкл. листенер на загрузках и состояние кнопки --->
          obs = this.obs = async () => {
              const val = cbu.getPrefs(pref),
                    icon = this.ownerDocument.getAnonymousElementByAttribute(self, 'class', 'toolbarbutton-icon');
              icon.style.filter = val ? '' : 'grayscale(1) opacity(.6)';
              // регистрируем / удаляем листенер на загрузках --->
              if (val && !isHndlr()) {
                  list.addView(view);
                  window.dlHndlr = true;
              }
              else if (!val) {
                  list.removeView(view);
                  delete window.dlHndlr;
              }
          };
    cbu.isPref(pref, false); obs(); // Создать параметр, если не существует
    this._handleClick = () => cbu.setPrefs(pref, !cbu.getPrefs(pref)); // переключаем параметр about:config по клику на кнопке
    Services.prefs.addObserver(pref, obs, false); // зарегистрировать обсервер
    addDestructor(reason=> {
        list.removeView(view);
        if (!Services.startup.shuttingDown && reason == 'destructor' && window.dlHndlr) {
            delete window.dlHndlr;
            const win = [...o.windows].find(win => win != window);
            win && win.document.getElementById(this.id).obs();
        }
        else
            delete window.dlHndlr;
        Services.prefs.removeObserver(pref, obs)}); // удалить обсервер, листенер и параметр в about:config при удалении или переинициализации кнопки
})();

Или готовая кнопка (выделить и вставить и перейти в адресной строке):

Код:
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname/%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAnAAAAJwBXTUFigAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAGmSURBVDiNlZM9iBNRFIW/+eFl1aAjMqZJ4a5tyKYIgekSGd0kBBYiCIKdllZGTaGdKCyiW+wKip2CpBMWkipgPSkkCdiHKEKmSKEjrCQzz0InKDvj6IHb3HfudzkXniKlBMCyrCemaW4LIdaIkOu6x4QQ7/v9/sU/HqSUZDKZ9Var9cnzPBlXnU5HNhqNwLbtF1JKwlIBNE3bLBaLZ6M2/y7btpVcLne9UqncDntq0lCodDpNt9tlNptp0+l0J5vNbgLo/wool8tYlgVAr9cL2u32OjCKBARBwOs3Lzn8/g2AtdQJrl29QSqVAkDXdRl6IwGe53Hw7jn5yxMAPhyco77VxDTNI97YCMdPqpgbCwDSp7TYaEeOOB6PqW9f4Mz5r6ve6Y0vNK/UGA6HyYB8Pk+1egmpLFY9yYJqbYtCoZAMALjffoT4XGPiGEwcA/1jnXt3H0ZGiL3BzoN9bt76GWP/6V6cLR6gqirPdl8BoCjK/wOSBleLAHzfHzmO4ya6f8lxHNf3/RGAEn7nUqn02DCMphAi9bfh5XJ5OJ/P3w4GgzsAPwBhYp+Hqdg5YwAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%28async%20%28%29%20%3D%3E%20%7B%0A%20%20%20%20%27use%20strict%27%3B%0A%20%20%20%20let%20filePath%20%3D%20%27%27%2C%20//%20%u041F%u0443%u0442%u044C%20%u043A%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%u0435%u043C%u043E%u043C%u0443%20%u0444%u0430%u0439%u043B%u0443%2C%20%u0432%20%u0432%u0438%u0434%u0435%3A%20C%3A%5C%5Cexample-dir%5C%5Chstart.exe%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0438%u043B%u0438%20OS.Path.join%28OS.Constants.Path.profileDir%2C%20%27example-dir%27%2C%20%27hstart.exe%27%29%20-%20%u0447%u0442%u043E%u0431%u044B%20%u043F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043F%u0443%u0442%u044C%20%u043A%20%u0444%u0430%u0439%u043B%u0443%20%u0432%20%u0437%u0430%u0434%u0430%u043D%u043D%u043E%u0439%20%u043F%u0430%u043F%u043A%u0435%20%u043F%u0440%u043E%u0444%u0438%u043B%u044F%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0415%u0441%u043B%u0438%20%u043F%u0443%u0442%u044C%20%u043A%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%u0435%u043C%u043E%u043C%u0443%20%u0444%u0430%u0439%u043B%u0443%20%u043D%u0435%20%u0437%u0430%u0434%u0430%u043D%2C%20%u0442%u043E%20%u0444%u0430%u0439%u043B%20%u0431%u0443%u0434%u0435%u0442%20%u0441%u043E%u0437%u0434%u0430%u043D%20%u043F%u043E%20%u043F%u0443%u0442%u0438%3A%20%25BROWSERPROFILE%25%5Ctools%5Cexample.bat%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0438%u0437%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0432%u043E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%u0421%u043F%u0440%u0430%u0432%u043A%u0430%20%u044D%u0442%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u0438%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0441%20%u0437%u0430%u043C%u0435%u043D%u043E%u0439%20%u0432%20%u043D%u0435%u043C%20%25dlFilePath%25%20%u0438%20%25dlFileName%25%20%u043D%u0430%20%u043F%u043E%u043B%u0443%u0447%u0435%u043D%u043D%u044B%u0439%20%u043F%u0443%u0442%u044C%20%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0437%u0430%u0433%u0440%u0443%u0436%u0435%u043D%u043D%u043E%u0433%u043E%20%u0444%u0430%u0439%u043B%u0430%0A%20%20%20%20%20%20%20%20dlFilePath%2C%0A%20%20%20%20%20%20%20%20dlFileName%2C%0A%20%20%20%20%20%20%20%20args%20%3D%20%5B%5D%2C%20//%20%u0430%u0440%u0433%u0443%u043C%u0435%u043D%u0442%u044B%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%2C%20%u043F%u0440%u0438%u043C%u0435%u0440%u044B%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%5B%22%25dlFilePath%25%22%2C%20%22%25dlFileName%25%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%5B%22/ELEVATE%22%2C%20%22/NOUAC%22%2C%20%22/NOCONSOLE%22%2C%20%22example.exe%20%5C%22%25dlFilePath%25%5C%22%20%5C%22%25dlFileName%25%5C%22%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%25dlFilePath%25%20%u0438%20%25dlFileName%25%20-%20%u0431%u0443%u0434%u0443%u0442%20%u0437%u0430%u043C%u0435%u043D%u0435%u043D%u044B%20%u043D%u0430%20%u043F%u043E%u043B%u0443%u0447%u0435%u043D%u043D%u044B%u0435%20%u043F%u0443%u0442%u044C%20%u0438%20%u0438%u043C%u044F%20%u0437%u0430%u0433%u0440%u0443%u0436%u0435%u043D%u043D%u043E%u0433%u043E%20%u0444%u0430%u0439%u043B%u0430%0A%20%20%20%20%20%20%20%20convertToUnicode%20%3D%20false%3B%20//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0444%u0432%u0439%u043B%20%u0438%u0437%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0421%u043F%u0440%u0430%u0432%u043A%u0430%20%u0432%20UTF-8%20%u0438%u043B%u0438%2C%20%u0435%u0441%u043B%u0438%20false%2C%20%u0441%20%u043A%u043E%u043D%u0432%u0435%u0440%u0442%u0430%u0446%u0438%u0435%u0439%20%u0432%20CP-1251%0A%20%20%20%20const%20o%20%3D%20%7B//%20https%3A//github.com/Infocatcher/Private_Tab/issues/228%23issuecomment-238963363%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20get%20windows%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%28function*%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20ws%20%3D%20Services.wm.getEnumerator%28%22navigator%3Abrowser%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20while%28ws.hasMoreElements%28%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yield%20ws.getNext%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%28%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20isHndlr%20%3D%20%28%29%20%3D%3E%20%5B...o.windows%5D.some%28win%20%3D%3E%20win.dlHndlr%29%2C%0A%20%20%20%20%20%20%20%20%20%20convertFromUnicode%20%3D%20%28chr%2C%20str%29%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20converter%20%3D%20Cc%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.createInstance%28Ci.nsIScriptableUnicodeConverter%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20converter.charset%20%3D%20chr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20converter.ConvertFromUnicode%28str%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20writeToFile%20%3D%20async%20%28str%2C%20path%29%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28convertToUnicode%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20enc%20%3D%20new%20TextEncoder%28%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20arr%20%3D%20enc.encode%28str%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20OS.File.writeAtomic%28path%2C%20arr%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20custombuttonsUtils.writeFile%28path%2C%20convertFromUnicode%28%27CP1251%27%2C%20str%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20openFile%20%3D%20async%20%28path%29%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28path%20%26%26%20await%20exists%28path%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsILocalFile%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20file.initWithPath%28path%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20process.init%28file%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20argss%20%3D%20args.map%28el%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28el.indexOf%28%27%25dlFilePath%25%27%29%20%21%3D%20-1%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20el%20%3D%20el.replace%28%27%25dlFilePath%25%27%2C%20dlFilePath%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28el.indexOf%28%27%25dlFileName%25%27%29%20%21%3D%20-1%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20el%20%3D%20el.replace%28%27%25dlFileName%25%27%2C%20dlFileName%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20convertFromUnicode%28%27CP1251%27%2C%20el%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20process.run%28false%2C%20argss%2C%20argss.length%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20path%20%3D%20await%20createFile%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20file%20%3D%20new%20FileUtils.File%28path%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20file.launch%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20exists%20%3D%20async%20%28path%29%20%3D%3E%20OS.File.exists%28path%29%2C%0A%20%20%20%20%20%20%20%20%20%20makePath%20%3D%20%28arr%29%20%3D%3E%20OS.Path.join%28...arr%29%2C%0A%20%20%20%20%20%20%20%20%20%20createFile%20%3D%20async%20%28%29%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0421%u043E%u0437%u0434%u0430%u0435%u043C%20%u0434%u0438%u0440%u0435%u043A%u0442%u043E%u0440%u0438%u044E%20%u0438%20%u0444%u0430%u0439%u043B%20%u0432%20%u043F%u0430%u043F%u043A%u0435%20%u043F%u0440%u043E%u0444%u0438%u043B%u044F%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%2C%20%u0435%u0441%u043B%u0438%20%u043F%u0443%u0442%u044C%20%u0432%u044B%u0448%u0435%20%u043D%u0435%20%u0437%u0430%u0434%u0430%u043D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20profDir%20%3D%20OS.Constants.Path.profileDir%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dirName%20%3D%20%27tools%27%2C%20//%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u043F%u0430%u043F%u043A%u0438%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fileName%20%3D%20%27example.bat%27%2C%20//%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0438%20%u0440%u0430%u0441%u0448%u0438%u0440%u0435%u043D%u0438%u0435%20%u0444%u0430%u0439%u043B%u0430%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pathToDir%20%3D%20makePath%28%5BprofDir%2C%20dirName%5D%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pathToFile%20%3D%20makePath%28%5BprofDir%2C%20dirName%2C%20fileName%5D%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0411%u0435%u0440%u0435%u043C%20%u0442%u0435%u043A%u0441%u0442%20%u0444%u0430%u0439%u043B%u0430%20%u0438%u0437%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0421%u043F%u0440%u0430%u0432%u043A%u0430%20%u0438%20%u043C%u0435%u043D%u044F%u0435%u043C%20%u0432%20%u043D%u0435%u043C%20%25dlFilePath%25%20%u0438%20%25dlFileName%25%20%u043D%u0430%20%u043F%u043E%u043B%u0443%u0447%u0435%u043D%u043D%u044B%u0439%20%u043F%u0443%u0442%u044C%20%u0438%20%u043D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u0437%u0430%u0433%u0440%u0443%u0436%u0435%u043D%u043D%u043E%u0433%u043E%20%u0444%u0430%u0439%u043B%u0430%20---%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fileText%20%3D%20this.Help.replace%28%27%25dlFilePath%25%27%2C%20dlFilePath%29.replace%28%27%25dlFileName%25%27%2C%20dlFileName%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%21%28await%20exists%28pathToDir%29%29%20%26%26%20await%20OS.File.makeDir%28pathToDir%29%3B%20//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0434%u0438%u0440%u0435%u043A%u0442%u043E%u0440%u0438%u044E%2C%20%u0435%u0441%u043B%u0438%20%u043D%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20await%20writeToFile%28fileText%2C%20pathToFile%29%3B%20//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0444%u0430%u0439%u043B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20pathToFile%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20//%20%u0445%u0435%u043D%u0434%u043B%u0435%u0440%20%u043D%u0430%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0430%u0445%20---%3E%0A%20%20%20%20%20%20%20%20%20%20listener%20%3D%20dl%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21dl.succeeded%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20dlFilePath%20%3D%20dl.target.path%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20dlFileName%20%3D%20dl.target.path.match%28/%5B%5E%5C%5C%5D+%24/%29%5B0%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20list.remove%28dl%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0417%u0430%u043F%u0443%u0441%u043A%u0430%u0435%u043C%20%u0444%u0430%u0439%u043B%20%u043F%u0440%u0438%20%u0443%u0441%u043F%u0435%u0448%u043D%u043E%u043C%20%u043E%u043A%u043E%u043D%u0447%u0430%u043D%u0438%u0438%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0438%20%u0444%u0430%u0439%u043B%u0430%20---%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20openFile%28filePath%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20list%20%3D%20await%20Downloads.getList%28Downloads.ALL%29%2C%0A%20%20%20%20%20%20%20%20%20%20view%20%3D%20%7B%20onDownloadChanged%3A%20listener%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20pref%20%3D%20%27CB.handle-download-end%27%2C%20//%20%u041D%u0430%u0437%u0432%u0430%u043D%u0438%u0435%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u0430%20%u0432%20about%3Aconfig%2C%20%u0432%20%u043A%u043E%u0442%u043E%u0440%u0443%u044E%20%u0437%u0430%u043F%u0438%u0441%u044B%u0432%u0430%u0435%u0442%u0441%u044F%20%u0441%u043E%u0441%u0442%u043E%u044F%u043D%u0438%u0435%20%u043A%u043D%u043E%u043F%u043A%u0438%0A%20%20%20%20%20%20%20%20%20%20//%20%u041E%u0431%u0441%u0435%u0440%u0432%u0435%u0440%20%u043D%u0430%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u0435%20about%3Aconfig%2C%20%u0432%u043A%u043B./%u0432%u044B%u043A%u043B.%20%u043B%u0438%u0441%u0442%u0435%u043D%u0435%u0440%20%u043D%u0430%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0430%u0445%20%u0438%20%u0441%u043E%u0441%u0442%u043E%u044F%u043D%u0438%u0435%20%u043A%u043D%u043E%u043F%u043A%u0438%20---%3E%0A%20%20%20%20%20%20%20%20%20%20obs%20%3D%20this.obs%20%3D%20async%20%28%29%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20const%20val%20%3D%20cbu.getPrefs%28pref%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20icon%20%3D%20this.ownerDocument.getAnonymousElementByAttribute%28self%2C%20%27class%27%2C%20%27toolbarbutton-icon%27%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20icon.style.filter%20%3D%20val%20%3F%20%27%27%20%3A%20%27grayscale%281%29%20opacity%28.6%29%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20%u0440%u0435%u0433%u0438%u0441%u0442%u0440%u0438%u0440%u0443%u0435%u043C%20/%20%u0443%u0434%u0430%u043B%u044F%u0435%u043C%20%u043B%u0438%u0441%u0442%u0435%u043D%u0435%u0440%20%u043D%u0430%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u0430%u0445%20---%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28val%20%26%26%20%21isHndlr%28%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20list.addView%28view%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20window.dlHndlr%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28%21val%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20list.removeView%28view%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20delete%20window.dlHndlr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20cbu.isPref%28pref%2C%20false%29%3B%20obs%28%29%3B%20//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%2C%20%u0435%u0441%u043B%u0438%20%u043D%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%0A%20%20%20%20this._handleClick%20%3D%20%28%29%20%3D%3E%20cbu.setPrefs%28pref%2C%20%21cbu.getPrefs%28pref%29%29%3B%20//%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0430%u0435%u043C%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%20about%3Aconfig%20%u043F%u043E%20%u043A%u043B%u0438%u043A%u0443%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%0A%20%20%20%20Services.prefs.addObserver%28pref%2C%20obs%2C%20false%29%3B%20//%20%u0437%u0430%u0440%u0435%u0433%u0438%u0441%u0442%u0440%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u043E%u0431%u0441%u0435%u0440%u0432%u0435%u0440%0A%20%20%20%20addDestructor%28reason%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20list.removeView%28view%29%3B%0A%20%20%20%20%20%20%20%20if%20%28%21Services.startup.shuttingDown%20%26%26%20reason%20%3D%3D%20%27destructor%27%20%26%26%20window.dlHndlr%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20delete%20window.dlHndlr%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20win%20%3D%20%5B...o.windows%5D.find%28win%20%3D%3E%20win%20%21%3D%20window%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20win%20%26%26%20win.document.getElementById%28this.id%29.obs%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20delete%20window.dlHndlr%3B%0A%20%20%20%20%20%20%20%20Services.prefs.removeObserver%28pref%2C%20obs%29%7D%29%3B%20//%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u043E%u0431%u0441%u0435%u0440%u0432%u0435%u0440%2C%20%u043B%u0438%u0441%u0442%u0435%u043D%u0435%u0440%20%u0438%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%20%u0432%20about%3Aconfig%20%u043F%u0440%u0438%20%u0443%u0434%u0430%u043B%u0435%u043D%u0438%u0438%20%u0438%u043B%u0438%20%u043F%u0435%u0440%u0435%u0438%u043D%u0438%u0446%u0438%u0430%u043B%u0438%u0437%u0430%u0446%u0438%u0438%20%u043A%u043D%u043E%u043F%u043A%u0438%0A%7D%29%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B@echo%20off%0Aecho%20Patch%3A%20%25dlFilePath%25%20Name%3A%20%25dlFileName%25%0Apause%0A%3Aexit%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


Всего записей: 186 | Зарегистр. 09-04-2017 | Отправлено: 13:10 29-08-2018 | Исправлено: nfmzkvmx, 23:23 30-08-2018
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » Расширения для Firefox/Mozilla Firefox Extensions (часть 9)
Maz (02-04-2019 17:51): Переезжаем: Расширения для Firefox/Mozilla Firefox Extensions (часть 10)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru