>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Сustom Buttons http://forum.mozilla-russia.org/viewforum.php?id=34 >Есть ли сохранялка по Shift+click ? http://forum.mozilla-russia.org/viewtopic.php?id=54307 |
selevo > 25-03-2012 09:45:13 |
в FF при клике на ссылку появляется контекстное меню,там есть пункт : Сохранить объект как... |
bunda1 > 25-03-2012 19:05:03 |
Сохранить ссылку или изображение двойным правым кликом(Firefox 3.6 +) Выделить код Код://Сохранить ссылку или изображение двойным правым кликом.................. gBrowser.addEventListener("click", function(event) { if (event.button !== 2) return; //.... if (gContextMenu.onLink && !gContextMenu.onImage){ gContextMenu.saveLink()}; if (gContextMenu.onLink && gContextMenu.onImage){ gContextMenu.saveMedia();}; //.... setTimeout(function() { document.getElementById("contentAreaContextMenu").hidePopup()}, 500) }, false); Сохранить изображение в папке загрузки двойным правым кликом(Firefox 3.6 +) Выделить код Код:// Сохранить изображение в папке загрузки двойным правым кликом, без запроса на место сохранения ...................... gBrowser.mPanelContainer.addEventListener("dblclick", function(event) { if ( event.button == 2 && event.target.nodeName == 'IMG') saveImageURL(gContextMenu.imageURL, 0, 0, 0, 1, null, content.document); //.... setTimeout(function() { document.getElementById("contentAreaContextMenu").hidePopup()}, 20) }, false); |
selevo > 26-03-2012 00:11:55 |
Спасибо! |
bunda1 > 26-03-2012 19:30:13 |
selevo пишет
Можно, но как ты будешь открывать контекстное меню по ПКМ на ссылках и изображениях. selevo пишет
Если не знаешь JavaScript то можешь начать с хорошего учебника Современный учебник JavaScript | JavaScript.ru про кнопки для Custom Buttons можно почитать тут |
bunda1 > 26-03-2012 20:10:54 |
selevo пишет
Сохранить ссылку или изображение - Shift+ПКМ(Firefox 3.6 +) Выделить код Код:document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", function(event) { if (!event.shiftKey) return; if (gContextMenu.onLink && !gContextMenu.onImage){ gContextMenu.saveLink()}; //... if (gContextMenu.onLink && gContextMenu.onImage){ gContextMenu.saveMedia();}; }, false); |
bunda1 > 26-03-2012 21:00:02 |
Сохранить изображение в папке загрузки - Shift+ПКМ(Firefox 3.6 +) Выделить код Код://Сохранить изображение в папке загрузки - Shift+ПКМ......... document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", function(event) { if (!event.shiftKey) return; //... if (gContextMenu.onLink && gContextMenu.onImage){ var doc = gContextMenu.target.ownerDocument; var d = "nodePrincipal" in doc?doc.nodePrincipal:doc.location.href; urlSecurityCheck(gContextMenu.imageURL, d); saveImageURL(gContextMenu.imageURL, null, "SaveImageTitle", false, true, makeURI(doc.location.href)); }; //.... setTimeout(function() { document.getElementById("contentAreaContextMenu").hidePopup()}, 50) }, false); |
selevo > 26-03-2012 21:30:17 |
да контекстное пофиг не пользуюсь,так-то.И вообще это больше для тестов сайтов. |
bunda1 > 26-03-2012 21:38:33 |
selevo |
selevo > 26-03-2012 23:18:56 |
да ,всё в той же кнопке меняю. проверял на чистом профиле |
bunda1 > 26-03-2012 23:51:01 |
Рестарт. |
selevo > 27-03-2012 00:15:32 |
без изменений |
bunda1 > 27-03-2012 00:22:01 |
Измени папку загрузки. |
selevo > 27-03-2012 08:17:46 |
у меня сзадана была |
bunda1 > 27-03-2012 08:19:53 |
Ну тогда я не знаю. |
selevo > 27-03-2012 10:41:40 |
сейчас проверю на вашей сборке |
bunda1 > 27-03-2012 18:40:44 |
Может попробуй этот код: Выделить код Код:// Сохранить изображение в папке загрузки двойным правым кликом, без запроса на место сохранения ...................... gBrowser.mPanelContainer.addEventListener("dblclick", function(event) { if ( event.button == 2 && event.target.nodeName == 'IMG') saveImageURL(gContextMenu.imageURL, 0, 0, 0, 1, null, content.document); //.... setTimeout(function() { document.getElementById("contentAreaContextMenu").hidePopup()}, 20) }, false); |
selevo > 29-03-2012 20:21:11 |
проверил в вашей сборке... |
bunda1 > 29-03-2012 20:37:05 |
Конечно проверял на своей сборке и FF14, я всегда проверяю. Не знаю в чем причина. Мистика однако. |
selevo > 29-03-2012 20:56:52 |
ну естественно не будет работать,у меня-то 3.6 версия. |
bunda1 > 29-03-2012 21:10:01 |
На FF 3.6 тоже работает. |
selevo > 29-03-2012 22:25:25 |
давайте знаете что сделаем,скиньте мне вашу портабле версию с этой кнопкой,а я её у себя проверю. |
Dеnis > 29-10-2012 06:06:46 |
Как сделать, чтобы сохраненные изображения не отображались в менеджере загрузок? Можно отключить в настройках глобально, но |
bunda1 > 30-10-2012 19:33:55 |
Dеnis |
Dеnis > 30-10-2012 22:29:24 |
Правый клик > Сохранить изображение как... |
Dumby > 02-11-2012 05:50:53 |
bunda1 Denis пишет
Как думаешь - так сойдёт ? скрытый текст Выделить код Код:var menuItem = document.getElementById("context-saveimage"); var dm = Components.classes["@mozilla.org/download-manager;1"] .getService(Components.interfaces.nsIDownloadManager); var url = null; var listener = { onDownloadStateChange: function(prevState, download) { if (download.source.spec != url) return; var state = download.state; if (state == dm.DOWNLOAD_FINISHED || state == dm.DOWNLOAD_CANCELED || state == dm.DOWNLOAD_FAILED) { dm.removeDownload(download.id); dm.removeListener(this); } } } function cleaner() { url = gContextMenu.imageURL; dm.addListener(listener); } menuItem.addEventListener("command", cleaner, false); this.onDestroy = function() { menuItem.removeEventListener("command", cleaner, false); } |
bunda1 > 02-11-2012 19:12:10 |
Dumby |
Dumby > 03-11-2012 01:03:36 |
bunda1 bunda1 пишет
Кстати, попробовал сделать отключение только для «Правый клик > Сохранить изображение как...», скрытый текст Выделить код Код:const prefName = "browser.download.manager.showWhenStarting"; var menuItem = document.getElementById("context-saveimage"); var dm = Components.classes["@mozilla.org/download-manager;1"] .getService(Components.interfaces.nsIDownloadManager); var cm = document.getElementById("contentAreaContextMenu"); var url = null; var thePref = true; var listener = { onDownloadStateChange: function(prevState, download) { if (download.source.spec != url) return; var state = download.state; if (state == dm.DOWNLOAD_FINISHED || state == dm.DOWNLOAD_CANCELED || state == dm.DOWNLOAD_FAILED) { dm.removeDownload(download.id); dm.removeListener(this); Application.prefs.setValue(prefName, thePref); } } } function cleaner() { url = gContextMenu.imageURL; dm.addListener(listener); } function onPopup(e) { if (e.target != cm) return; thePref = Application.prefs.getValue(prefName, true); Application.prefs.setValue(prefName, false); addEventListener("click", function reset(e) { removeEventListener("click", reset, false); if (e.target == menuItem) return; Application.prefs.setValue(prefName, thePref); }, false); } menuItem.addEventListener("command", cleaner, false); cm.addEventListener("popupshowing", onPopup, false); this.onDestroy = function() { menuItem.removeEventListener("command", cleaner, false); cm.removeEventListener("popupshowing", onPopup, false); } |
bunda1 > 03-11-2012 09:09:52 |
А так тоже пробовал: Выделить код Код:document.getElementById("context-saveimage").addEventListener("click", cleaner, false); и |
Dumby > 03-11-2012 13:48:48 |
bunda1 пишет
Да! Это ты здо́рово подметил. скрытый текст Выделить код Код:const prefName = "browser.download.manager.showWhenStarting"; var menuItem = document.getElementById("context-saveimage"); var dm = Components.classes["@mozilla.org/download-manager;1"] .getService(Components.interfaces.nsIDownloadManager); var url = null; var thePref = true; var listener = { onDownloadStateChange: function(prevState, download) { if (download.source.spec != url) return; var state = download.state; if (state == dm.DOWNLOAD_FINISHED || state == dm.DOWNLOAD_CANCELED || state == dm.DOWNLOAD_FAILED) { dm.removeDownload(download.id); dm.removeListener(this); Application.prefs.setValue(prefName, thePref); } } } function cleaner() { thePref = Application.prefs.getValue(prefName, true); Application.prefs.setValue(prefName, false); url = gContextMenu.imageURL; dm.addListener(listener); } menuItem.addEventListener("click", cleaner, false); this.onDestroy = function() { menuItem.removeEventListener("click", cleaner, false); } |
bunda1 > 03-11-2012 19:02:27 |
Я имел виду что некоторые не запускаемые функции можно запустить если использовать метод setTimeout |
Dumby > 03-11-2012 20:50:58 |
bunda1 Да-да, setTimeout почти всегда помогает, но думаю это - на крайний случай, |
PEAKTOP > 13-03-2013 17:15:05 |
bunda1 пишет
Почему-то этот код вызывает окно "Сохранить как..." два раза подряд - первое закрываешь, и тут же открывается второе. |
bunda1 > 13-03-2013 21:18:23 |
PEAKTOP пишет
Вот попробуй: Выделить код Код:// Сохранить ссылку или изображение с диалогом сохранения если нажать Shift + правый клик(ПКМ) на ссылку или изображение ............... function saveLinkOrImage(e) { if ( e.shiftKey && e.button == 2 && /img|a/.test(e.target.localName.toLowerCase()) ) { e.preventDefault(); saveURL( e.target.src || e.target.href ); } }; gBrowser.addEventListener("click", saveLinkOrImage, false); this.onDestroy = function() { gBrowser.removeEventListener("click", saveLinkOrImage, false); }; |
PEAKTOP > 13-03-2013 23:31:46 |
bunda1, спасибо. Контекстное меню пропало, а окно "Сохранить как" всё равно открывается два раза. |
bunda1 > 13-03-2013 23:43:27 |
PEAKTOP |
PEAKTOP > 15-03-2013 11:58:49 |
bunda1, да какой-то шайтан с этой кнопкой - кода в других местах нет (специально пересмотрел код других кнопок). Последовательность действий - удаляю код, и окно "сохранить как" появляется единожды. Перезапускаю браузер - функция перестаёт работать (т.е.) кода этой кнопки в других местах нет. Вставляю код - окно появляется два раза. Я сам в шоке. |
bunda1 > 16-03-2013 11:24:44 |
PEAKTOP Выделить код Код:// Сохранить ссылку или изображение с диалогом сохранения двойним ПКМ(правый клик) на ссылку или изображение ............... function saveLinkOrImage(e) { if ( e.button == 2 && /img|a/.test(e.target.localName.toLowerCase()) ) { e.preventDefault(); saveURL( e.target.src || e.target.href ); } }; gBrowser.addEventListener("dblclick", saveLinkOrImage, false); this.onDestroy = function() { gBrowser.removeEventListener("dblclick", saveLinkOrImage, false); }; |
difabor > 21-04-2014 01:07:58 |
У меня есть более общий вопрос. |
etoins srldu > 23-04-2014 21:43:41 |
difabor пишет
Вот пример: Выделить код Код:// отслеживать открытие контекстного меню на странице .... addEventListener("popupshowing", function(e) { LOG('e.ctrlKey' + " " + e.ctrlKey); LOG('e.altKey' + " " + e.altKey); LOG('e.shiftKey' + " " + e.shiftKey); //menuitem.hidden = !gContextMenu.onImage; // скрывать пункт если не контекстное меню изображений }, true, document.getElementById("contentAreaContextMenu") ); Лучше сделать в контекстном меню несколько подменю и туда перенести лишние пункты. |
difabor > 24-04-2014 05:44:41 |
etoins srldu пишет
Спасибо, но: |
etoins srldu > 25-04-2014 21:17:43 |
difabor пишет
Вот пример, передвигает стандартными пункты в подменю: Выделить код Код:(function () { var contextMenu = document.getElementById("contentAreaContextMenu"); var menu = document.createElement("menu"); menu.setAttribute("id", "context-submenu1"); menu.setAttribute("label", "подменю"); contextMenu.insertBefore( menu, document.getElementById("context-sep-properties") ); addDestructor(function() { contextMenu.removeChild( menu ) }); var menuPopup = menu.appendChild( document.createElement("menupopup") ); menuPopup.appendChild( document.getElementById("context-selectall") ); menuPopup.appendChild( document.getElementById("context-copy") ); })(); Пригодится: |
difabor > 26-04-2014 10:17:47 |
etoins srldu пишет
Большущее спасибо! |
difabor > 26-04-2014 13:00:59 |
Спасибо, okkamas_knife, но видать, мне это ещё не по зубам... |
difabor > 26-04-2014 16:07:46 |
Сделал! Вот код: Выделить код Код:var lst1 = ["openbox-context","context-selectall","context-copy","dwhelper-ctxmenu"]; var lst2 = ["context-back","context-forward"]; function sbmen (nam, lst) { var contextMenu = document.getElementById("contentAreaContextMenu"); var menu = document.createElement("menu"); menu.setAttribute("id", "context-submenu1"); menu.setAttribute("label", nam); contextMenu.insertBefore( menu, document.getElementById("context-sep-properties") ); addDestructor(function() { contextMenu.removeChild( menu ) }); var menuPopup = menu.appendChild( document.createElement("menupopup") ); for (var i = 0; i<lst.length; i++){if (document.getElementById(lst[i]) != null) menuPopup.appendChild( document.getElementById(lst[i]) ); } } sbmen("sbmenu1",lst1); sbmen("sbmenu2",lst2); В lst1, lst2 перечисляем те итемы основного контекстного меню, которые хотим упрятать в подменю, "sbmenu1", "sbmenu2" - имена подменюшек! |