Страницы: 1
Имеется 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)
Отсутствует
Имеется 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(); };
сохраняет текст в текстовой файл в папке загрузки.
Отсутствует
Спасибо.
Если заменить getPathToDownloadFolder() на "C:\\test\\" и текст в кавычках на gContextMenu.linkURL или gClipboard.read() то я почти у цели.
Но вопрос с кодировкой 1251 все-таки мучительно остается ....
Отсутствует
Да, так получилось.
Но я поторопился насчет gContextMenu.linkURL.
С gClipboard.read() функция работает, а с gContextMenu.linkURL нет, как прикрутить захват cсылки?
Отсутствует
Как все-таки открыть нужный файл и записать туда захваченный текст?
А зачем нужно открывать и записать, может можно просто записывать без открытия?
Отсутствует
прекрасно, давайте просто запишем!
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); };
Отсутствует
Вопрос вдогонку:
Как добавить возможность сделать замену текста в текстовом файле определенном своим полным путем (D:\\test\\text.txt напр., кодировка Windows-1251) ?
Определенный текст на строку, заданную как переменная, или наоборот, или оба фрагмента задаются как var ?
Отсутствует
Страницы: 1