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

Вы можете получить техническую поддержку и просто поболтать в jabber-конференциях Mozilla Россия: support@conference.mozilla-russia.org — для решения проблем с программами Mozilla, talks@conference.mozilla-russia.org — для общения на свободные темы.

№115-01-2018 12:16:05

ruslaw
Участник
 
Группа: Members
Зарегистрирован: 22-11-2017
Сообщений: 15
UA: Firefox 42.0

Как установить папку для сохранения файла?

Имеется html-страница со ссылками на внутренние файлы.
Имеется кнопка (взял отсюда) с помощью которой я могу сохранить в Clipboard полный путь файла и записать его в  текстовый файл с именем  файла который по ссылке.
Текстовик будет сохраняться в кодировке UTF-8 без BOM в дефолтной папке загрузок Firefoox.
Как мне
1) установить нужную мне папку для сохранения файла;
2) как сделать кодировку виндоуз-кириллица (CP-1251);
3) Изменить кнопку так чтобы она открывала определенный текстовый файл в CP-1251, записывала туда эту информацию тоже разумеется в CP-1251, ну и сохраняла все это.

Кнопка:

Выделить код

Код:

var icomnu = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAOABADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6q8V/H3xD8KvHOq2vijSobvw0Jybe6s12zxQsf3fU7XGCB2OQeTjB8x+M3xA8UeItW0/WdLv3Sx3xy6bDbyFdrkjy2KnHJJHXntX0D8ePhlYfEPwhcmZFF9aL5sEjMVGR2JHY89j1zg9K8F+DPh678U+FvDEYs9PtLU3MhimE0kksUKzs2zawILEcbs5A9+a+d4jdXF08PHB0mpKUVKzSTTveTu9LWWiTvdu2h3cN5h/ZOZV4Ypc8ZQbg3q09pR9NVZ66XXkf/9k=";
 
(function openLinkAsMenu(){

    const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

    var contextMenu = document.getElementById("contentAreaContextMenu");
    var separator = document.getElementById("context-bookmarklink");
    var eventTarget = null;
    
    var menu = document.createElementNS(kXULNS, "menu");
    menu.id = "openLinkAsMenu";
    menu.setAttribute("label", "Get Full Path");
    menu.setAttribute("class", "menu-iconic");
    menu.setAttribute("image", icomnu);
    menu.hidden = true;
    menu.addEventListener("mouseup", function(ef) {
    // действие по нажатию на сам пункт меню
          switch(ef.button) {
             case 0:
                catchFullPath();
                contextMenu.hidePopup();
                break;
            }
        });   

    contextMenu.insertBefore(menu, document.getElementById("context-sep-open"));
 
     contextMenu.addEventListener("popupshowing", setMenuDisplay, false);

       function setMenuDisplay(aEvent) {
                 if (gContextMenu.onLink) {
                 document.getElementById("openLinkAsMenu").hidden = false;
        }
                 else
                 document.getElementById("openLinkAsMenu").hidden = true;
    }
    
    

//------------------------    
    
function catchFullPath() {
        var url=decodeURIComponent(gContextMenu.linkURL);
        var y = url.lastIndexOf("/");
        var wrl=url.substring(8).replace(new RegExp("/",'g'),"\\");
        var name = url.substring(y+1);
        gClipboard.write(url);
        
        saveURL("data:text/plain," + ( wrl ), name+".txt", null, false, true, null, content.document);       
        }        
     
 //-----------------------------------------------------------------------------

// ================ end ================================
        
})();

Отредактировано ruslaw (15-01-2018 17:17:47)

Отсутствует

 

№215-01-2018 21:23:01

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4663
UA: unknown 0.0

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

ruslaw пишет:

Имеется html-страница со ссылками на внутренние файлы.
Имеется кнопка (взял отсюда) с помощью которой я могу сохранить в Clipboard полный путь файла и записать его в  текстовый файл с именем  файла который по ссылке.
Текстовик будет сохраняться в кодировке UTF-8 без BOM в дефолтной папке загрузок Firefoox.
Как мне
1) установить нужную мне папку для сохранения файла;
2) как сделать кодировку виндоуз-кириллица (CP-1251);
3) Изменить кнопку так чтобы она открывала определенный текстовый файл в CP-1251, записывала туда эту информацию тоже разумеется в CP-1251, ну и сохраняла все это.

Насчёт CP-1251 не знаю, но вот такой пример с UTF-16:

Выделить код

Код:

function saveText() {
   var text = convertFromUnicode("UTF-16", "Текстовик будет сохраняться в кодировке UTF-8 без BOM в дефолтной папке загрузок Firefoox");
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
   file.initWithPath( getPathToDownloadFolder() );
   file.append("CB text " + new Date().toLocaleFormat("%d.%m.%Y. %H·%M·%S") + ".txt");
   custombuttonsUtils.writeFile(file.path, text);
   file.launch(); 
};
saveText();

function getPathToDownloadFolder() { 
   try { return Services.downloads.userDownloadsDirectory.path } 
   catch(e) { return Services.downloads.defaultDownloadsDirectory.path }; 
};

function convertFromUnicode(charset, str) {
   var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
   converter.charset = charset;
   str = converter.ConvertFromUnicode(str);
   return str + converter.Finish();
};

сохраняет текст в текстовой файл в папке загрузки.

Отсутствует

 

№315-01-2018 21:59:37

ruslaw
Участник
 
Группа: Members
Зарегистрирован: 22-11-2017
Сообщений: 15
UA: Firefox 42.0

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

Спасибо.
Если заменить getPathToDownloadFolder() на "C:\\test\\" и текст в кавычках на gContextMenu.linkURL или gClipboard.read() то я почти у цели.
Но вопрос с кодировкой 1251 все-таки мучительно остается ....  :/

Отсутствует

 

№415-01-2018 22:04:37

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4663
UA: unknown 0.0

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

ruslaw пишет:

Но вопрос с кодировкой 1251 все-таки мучительно остается ....  :/

Ну тогда поменяй в коде UTF-16 на Windows-1251.

Отсутствует

 

№515-01-2018 22:58:59

ruslaw
Участник
 
Группа: Members
Зарегистрирован: 22-11-2017
Сообщений: 15
UA: Firefox 42.0

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

Да, так получилось.
Но я поторопился насчет gContextMenu.linkURL.
С gClipboard.read() функция работает, а с gContextMenu.linkURL нет, как прикрутить захват cсылки?

Отсутствует

 

№615-01-2018 23:29:27

ruslaw
Участник
 
Группа: Members
Зарегистрирован: 22-11-2017
Сообщений: 15
UA: Firefox 42.0

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

все прикрутил с gContextMenu.linkURL, работает.
Но еще последний вопрос.
Как все-таки открыть нужный файл и записать туда захваченный текст?
Очень важно.

Отсутствует

 

№716-01-2018 14:20:37

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4663
UA: Firefox 24.0

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

ruslaw пишет:

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

А зачем нужно открывать и записать, может можно просто записывать без открытия?

Отсутствует

 

№816-01-2018 15:01:59

ruslaw
Участник
 
Группа: Members
Зарегистрирован: 22-11-2017
Сообщений: 15
UA: Firefox 42.0

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

прекрасно, давайте просто запишем!  :D

Отсутствует

 

№916-01-2018 20:06:29

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4663
UA: unknown 0.0

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

ruslaw пишет:

прекрасно, давайте просто запишем!  :D

Выделить код

Код:

function saveText() {
   var text = convertFromUnicode("Windows-1251", "Текстовик будет сохраняться в кодировке UTF-8 без BOM в дефолтной папке загрузок Firefoox");

   var url = content.document.location;
   if (/\.рф/.test(url.host)) url = convertFromUnicode("Windows-1251", url);
   
   var time = new Date().toLocaleFormat("%H:%M:%S");
   var title = convertFromUnicode("Windows-1251", getTabLabel());
   
   var text = "..............................................................\n"
            + title + " - " + time + "\n" + url + "\n\n" + text + "\n\n\n";
   var text = text.replace(/\u000A/g, "\u000D\u000A").replace(/\u000D\u000D\u000A/g, "\u000D\u000A");

   // путь к файлу и название файла
   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile)
   file.initWithPath("C:");
   file.append("test.txt");

   // создать файл с текстом или добавлять текст в файл
   var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
   file.exists() ? foStream.init(file, 0x02 | 0x10, 0664, 0) : foStream.init(file, 0x02|0x08|0x20, 0666, 0);
   foStream.write(text, text.length);
   foStream.close();

   // всплывающая подсказка дает возможность открыть файл если кликнуть на подсказке
   var notification = 'Сохранил текст в файл в: ' + file.path; 
   var image = gBrowser.mCurrentTab.image || self.image;
   var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
   alertsService.showAlertNotification(image, notification, "Кликни чтобы открыть файл", true, "", (s, t)=> { 
      if (t == 'alertclickcallback') file.launch();
   }, "");
};
saveText();

function convertFromUnicode(charset, str) {
   var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
   converter.charset = charset;
   str = converter.ConvertFromUnicode(str);
   return str + converter.Finish();
};

function getTabLabel() { 
   var label = gBrowser.mCurrentTab.label;      
   var label = label.replace(/[:+.\\\/<>?*|"]+/g, " ").replace(/\s\s+/g, " ");
   return label.substring(0, 50);
};

Отсутствует

 

№1016-01-2018 22:42:29

ruslaw
Участник
 
Группа: Members
Зарегистрирован: 22-11-2017
Сообщений: 15
UA: Firefox 42.0

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

Прикрутил к своей кнопке, работает.  Большое спасибо!

Отсутствует

 

№1123-01-2018 13:26:56

ruslaw
Участник
 
Группа: Members
Зарегистрирован: 22-11-2017
Сообщений: 15
UA: Firefox 42.0

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

Вопрос вдогонку:

Как добавить возможность сделать замену текста в текстовом файле определенном своим полным путем (D:\\test\\text.txt   напр., кодировка Windows-1251) ?
Определенный текст на строку, заданную как переменная, или наоборот, или оба фрагмента задаются как var ?

Отсутствует

 

Board footer

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