Поиск изображения в google из контекстного меню изображений (Firefox)
Автор: bunda1
Версия: от 02.06.2019.
Описание: Добавляет в контекстное меню изображений на странице новый пункт "Поиск изображения в google" который дает возможность запустить в новой активной вкладке поиск изображения в google.
Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.

Выделить код

Код:

// Поиск изображения в google из контекстного меню, от 02.06.2019. ..................
(()=> {
   var copyimage = document.getElementById("context-copyimage-contents");
   var contextMenu = copyimage.parentNode;

   var menuitem = contextMenu.insertBefore(document.createElement("menuitem"), copyimage);
   menuitem.setAttribute("label", "Поиск изображения в google");
   menuitem.setAttribute("class", "menuitem-iconic");
   menuitem.setAttribute("image", "https://www.google.lv/favicon.ico");
   menuitem.onclick =e=> { gBrowser.selectedTab = gBrowser.addTab("https://www.google.com/searchbyimage?image_url=" + encodeURIComponent(gContextMenu.imageURL), {
                                                                  triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()}) };
   addEventListener("popupshowing", ()=> menuitem.hidden = copyimage.hidden, true, contextMenu);
   addDestructor(()=> menuitem.remove());
})();

Добавить подменю "Поиск изображения в ..." в контекстном меню изображений (Firefox)
Автор: bunda1
Версия: от 02.06.2019.
Описание: Добавляет в контекстное меню изображений на странице подменю  ""Поиск изображения в ..."" который даёт возможность искать изображение в разных поисковиках в новой активной вкладке.
Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.

Выделить код

Код:

// Добавить подменю "Поиск изображения в" в контекстном меню изображений, от 02.06.2019. .............
(()=> {
   var copyimage = document.getElementById("context-copyimage-contents");
   var contextMenu = copyimage.parentNode;

   var array = [
      ['Google', 'https://www.google.lv/favicon.ico', 'https://www.google.com/searchbyimage?&image_url='],
      ['Яндекс', 'http://yastatic.net/morda-logo/i/favicon_islands.ico', 'http://yandex.ru/images/search?rpt=imageview&img_url='],
      ['Bing', 'https://www.bing.com/s/a/bing_p.ico', 'http://www.bing.com/images/searchbyimage?FORM=IRSBIQ&cbir=sbi&imgurl='],
      ['Tineye', 'http://tineye.com/favicon.ico', 'http://tineye.com/search?pluginver=bookmark_1.0&url='],
   ];
  
   var menu = contextMenu.insertBefore(document.createElement("menu"), copyimage); 
   menu.setAttribute("label", "Поиск изображения в ...");
   menu.setAttribute("class", "menu-iconic");
   menu.setAttribute("image", array[0][1]);
   menu.onclick =e=> { e.target.nodeName == 'menu' && search(array[0][2]); setTimeout(()=> contextMenu.hidePopup(), 20) };
   addEventListener("popupshowing", ()=> menu.hidden = copyimage.hidden, true, contextMenu);
   addDestructor(()=> menuitem.remove());

   var menuPopup = menu.appendChild(document.createElement("menupopup"));              
   array.forEach(m=> {
      var mItem = menuPopup.appendChild(document.createElement("menuitem"));
      mItem.setAttribute("label", m[0]);       
      mItem.setAttribute("image", m[1]);
      mItem.setAttribute("class", "menuitem-iconic");
      mItem.onclick =()=> search(m[2]);
   });
   
   var mItem = menuPopup.appendChild(document.createElement("menuitem"));
   mItem.setAttribute("label", 'Искать во всех поисковиках');       
   mItem.onclick =()=> { array.forEach(m=> { search(m[2]) }) };
   
   function search(finder) {
      gBrowser.selectedTab = gBrowser.addTab(finder + encodeURIComponent(gContextMenu.imageURL), {
                                             triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()});
   };
})();

bunda1, спасибо огромное за кнопку! Давно о такой мечтала, чтобы аналогичное расширение заменить.

А вы можете ещё сделать иконку Гугла google.gif для этого пункта в меню? :blush:

Добавить новый пункт  "Поиск изображения в google"  в контекстном меню изображений с иконкой

Можно загружать иконку с интернета:

Выделить код

Код:

// Добавить новый пункт "Поиск изображения в google" в контекстном меню изображений(с иконкой) ...........................
(function() {
   if ( document.getElementById("image-search") ) return; 
               
   var menuItem = document.createElement("menuitem");
   menuItem.id = "image-search";
   menuItem.setAttribute("label", "Поиск изображения в google");
   menuItem.setAttribute("class", "menuitem-iconic");
   menuItem.setAttribute("image", "http://www.canalcorredores.com/modulos/mod_periodico/pub/iconos/google.gif");
   menuItem.setAttribute("oncommand", "getBrowser().selectedTab = getBrowser().addTab('http://www.google.com/searchbyimage?image_url=' + encodeURIComponent( gContextMenu.mediaURL || gContextMenu.imageURL || gContextMenu.bgImageURL ) )");
   document.getElementById("context-viewimage").parentNode.insertBefore( menuItem, document.getElementById("context-viewimage") );
   
   document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", function() {
     menuItem.hidden = !gContextMenu.onImage; 
     }, false);
})();

или иконка как base64::

Выделить код

Код:

// Добавить новый пункт "Поиск изображения в google" в контекстном меню изображений(с иконкой) ...........................
(function() {
   if ( document.getElementById("image-search") ) return; 
               
   var menuItem = document.createElement("menuitem");
   menuItem.id = "image-search";
   menuItem.setAttribute("label", "Поиск изображения в google");
   menuItem.setAttribute("class", "menuitem-iconic");
   menuItem.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEhIAAAEAIACABQAAFgAAACgAAAASAAAAJAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBKBMpTCYX4GMrH/9gMxn/YDQV/2cyG/9nLxr/YjMd/10xHv9cMRz/XjIa/2ExHP9gNRn/YDIV/2IwHf9ULSL/RCcU4EEoEylLKBfgcjUe/349IP98QRr/gEEd/39AKP+FUjv/h2NL/4lkUP+GYEv/hVQ+/35CJv9+Phz/gEIb/4c8H/96PCT/azgb/0koFOBpMyT/jD8i/4RFIf97RB3/hEUr/7GCdf/q29L/+e3e/97HuP/dwLD/6M2+/76VhP9+RSr/hUMg/5NAH/+NQCX/h0Ai/2Q1Iv9yOyf/lkYn/4xFJP+HSSn/m25Y//7y6v/bw7f/fkw2/3hBJv90QSX/hFI9/+nUxv+2k4H/i0kq/5VIJP+QRiL/lkYn/3Q5Kv9zQSn/mUkp/5tJKf+XSin/roJr//757f+0gG//l0oq/5NMI/+WTCH/i00u/8q0o//jx7j/mFU6/5JMJP+TTiL/l0wl/3Y/K/93Rif/oE4p/6ZNK/+jTSz/pGpS//rn2v/Np5b/kFEx/5BSK/+XTyv/nmFJ/+rTyP/lyrv/nlk+/5NRJv+WUib/l1Ik/3lFK/+BSyr/plQt/6ZULP+mUyv/nFIz/6d3Yf/hxrX/3b6n/7SUf/+7l4b/8NjL//7z6//BkoH/mlMz/55TLP+iUyv/olMp/4FJK/+FSzP/qVUz/61ZMf+sWSv/rFYs/59TM/+cWT//nmJJ/8OSgf/+8ub/+O/b/8ikkv+iVTb/qVgv/6pVMP+1WDT/qVY1/4ZMMf+MUTX/q1sx/7RZMf+2WjH/t1wv/7JbLf+oXDT/nVtD/8yajv/+8uf/ybGZ/5VYOP+zWDL/t1sx/7NYMv+5WjX/sFk2/49SM/+VVDn/s143/7hfNP+8WzX/v141/6xeMv/ZoYD/+9/I/+DBtP/Ss6P/7L+l/7l1Tf+1XjT/vlw0/7tdM/+6YC//tV42/5FYNP+cU0D/uGE9/75fNf/GZTb/wGI4/8OBYv//5tT/5byr/6RjSP+lXD//26eM//TNsf+3YkH/xGI3/8NjNf+7Yi//uGE3/5pZOv+hWEH/wGY9/8RlNP/KaDf/xWY3/9+ef///5tv/v4Vt/8NmOv+9ZUD/xI16//7o2v/FgGX/x2g5/8poNv/KaDb/xWU5/6ZYQv+mYUH/y2s7/8xwN//TbTf/0m46/+CYd///59X/vIJk/81tOv/Bbz//4a6b//7n2P/FiGL/yWw4/9FtN//KcDf/zG45/6dfQP+tZT//1W4//9pxPf/VbTz/1G5B/75wTf/31L7/z56C/8V5TP/TkGP/+NXC//XSv/+4cEr/0nA7/9VwO//Ubz7/1G88/61kP/+0bkj/4XNC/99wPv/gckL/321B/9VwR//Gf2D/6reX/+/DoP/82br//uHO//LSvv/mp33/3nhJ/9dwQv/bb0X/23BG/7RrSP+wb0r/4nhK/+V3Rf/qeEX/8HZE/+lzQf/adUf/yWg+/7lfO/+tYDz/qWFA/6xeOf/IaTn/5nND/+h1SP/pdkj/3ndN/7RtUP+NWTrg2oJX/+uGVf/ofkv/84FN/++ETv/qfk//6n5Q/+h+Uv/ngFP/5oFS/+d/UP/nfk//839O/+5+Tv/uhVj/3YFa/5JYPOCRVkEppFo64NN8UP/dgVT/3oRR/92DTP/ihVj/34FX/+ODVf/mg1T/5IRO/96ET//cglH/4YJT/+CCVv/Te1D/oVk44JBVQCkAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEE=");
   menuItem.setAttribute("oncommand", "getBrowser().selectedTab = getBrowser().addTab('http://www.google.com/searchbyimage?image_url=' + encodeURIComponent( gContextMenu.mediaURL || gContextMenu.imageURL || gContextMenu.bgImageURL ) )");
   document.getElementById("context-viewimage").parentNode.insertBefore( menuItem, document.getElementById("context-viewimage") );
   
   document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", function() {
     menuItem.hidden = !gContextMenu.onImage; 
     }, false);
})();

После замены кода нужен рестарт.

Спасибо огромное! Теперь это идеальная кнопка! :)

Хм. У меня при поиске(иконки в UA) посылает сюда:
kiss_42kb.1364838389.png

А можно сделать регедикт сюда(это снизу той же страницы):
kiss_16kb.1364838459.png

01-04-2013 21:50:37

И можно её перенести вниз?
kiss_10kb.1364838606.png

Попробовал код вставить в Stylish - не работает. Жаль. )

Confidence пишет

Попробовал код вставить в Stylish - не работает. Жаль. )

Тут кнопки а не стили :dumb: вставлять(создать) надо в кнопку

Да понял я. Так уж, решил попробовать. ))

Не работает в 28.0 Перекидывает  на главную гугла и всё.

скрытый текст
Жму на картинке ПКМ и выбираю "поиск изображения в google"

Mishania пишет

Не работает в 28.0 Перекидывает  на главную гугла и всё.

пробуй этот скрипт http://userscripts.org/scripts/source/139231.user.js

feas
Удобная штука, но что-то тоже отказывается. Может у меня что.

feas пишет

И можно её перенести вниз?

Выделить код

Код:

// Добавить новый пункт "Поиск изображения в google" в контекстном меню изображений .........................
(function() {              
   var menuitem = document.createElement("menuitem");   
   menuitem.setAttribute("label", "Поиск изображения в google");
   menuitem.setAttribute("oncommand", "gBrowser.selectedTab = gBrowser.addTab('http://www.google.com/searchbyimage?image_url=' + encodeURIComponent( gContextMenu.mediaURL || gContextMenu.imageURL || gContextMenu.bgImageURL ) )");
   
   var contextMenu = document.getElementById("contentAreaContextMenu");
   var sep= document.getElementById("context-sep-copyimage");
   contextMenu.insertBefore( menuitem, sep );
   
   addEventListener("popupshowing", function() { menuitem.hidden = !gContextMenu.onImage }, false, contextMenu );
   addDestructor(function() { contextMenu.removeChild( menuitem ) });
})();

Насчёт других вопросов я не понял :/
04-04-2014 19:02:15

Mishania пишет

Не работает в 28.0 Перекидывает  на главную гугла и всё.

У меня работает даже на [nightly] наверно конфликт с другим расширением.

Отличная вешь! Спасибо огромное! У меня все в 28 работает.

bunda1, а возможно расширить кнопку до аналога расширения https://addons.mozilla.org/en-US/firefo … s/?src=api? Т.е. добавить Тинай и Яндекс

toltec пишет

bunda1, а возможно расширить кнопку до аналога расширения https://addons.mozilla.org/en-US/firefo … s/?src=api? Т.е. добавить Тинай и Яндекс

Выделить код

Код:

// Добавить подменю "Поиск изображения в ..." в контекстном меню изображений, от 01.10.2014 .............
(function() {  
  var contextMenu = document.getElementById("contentAreaContextMenu");  
  
  var menu = document.createElement("menu");      
  menu.setAttribute("label", "Поиск изображения в ...");  
  contextMenu.insertBefore( menu, document.getElementById("context-viewimage") ); 
  addEventListener("popupshowing", function() menu.hidden = !gContextMenu.onImage, false, contextMenu );
  addDestructor(function() contextMenu.removeChild(menu) );
  
  var array = [
        [ 'Google', 'https://www.google.lv/favicon.ico', 'http://www.google.com/searchbyimage?image_url=' ],
        [ 'Tineye', 'http://tineye.com/favicon.ico', 'http://tineye.com/search?pluginver=bookmark_1.0&url=' ],
        [ 'Яндекс', 'http://yastatic.net/morda-logo/i/favicon_islands.ico', 'http://yandex.ru/images/search?rpt=imageview&img_url=' ]        
              ];
  var menuPopup = menu.appendChild( document.createElement("menupopup") );              
  array.forEach(function( m ) { 
       var mItem = menuPopup.appendChild( document.createElement("menuitem") );
       mItem.setAttribute("label", m[0]);       
       mItem.setAttribute("image", m[1]);
       mItem.setAttribute("class", "menuitem-iconic");
       mItem.finder = m[2];
  });
  
  addEventListener("command", function(e) {
     gBrowser.selectedTab = gBrowser.addTab( e.target.finder + encodeURIComponent(gContextMenu.imageURL) );
  }, false, menu );            
})();

Отлично, спасибо

bunda1
А можно добавить в кнопку обработку кликов? Например ЛКМ открывает поиск в текущей странице, а СКМ в новой вкладке, в общем стандартное поведение.

Kamui пишет

bunda1
А можно добавить в кнопку обработку кликов? Например ЛКМ открывает поиск в текущей странице, а СКМ в новой вкладке, в общем стандартное поведение.

Выделить код

Код:

// Добавить новый пункт "Поиск изображения в google" в контекстном меню изображений ................................
((contextMenu) => {
   var menuitem = document.createElement("menuitem");   
   menuitem.setAttribute("label", "Поиск изображения в google");
   menuitem.onclick =e=> {
      var url = 'http://www.google.com/searchbyimage?image_url=' +
                 encodeURIComponent(gContextMenu.mediaURL || gContextMenu.imageURL || gContextMenu.bgImageURL);      
      e.button ? gBrowser.selectedTab = gBrowser.addTab(url) : loadURI(url);
   }
   contextMenu.insertBefore(menuitem, document.getElementById("context-viewimage"));
   
   addEventListener("popupshowing", ()=> menuitem.hidden = !gContextMenu.onImage, false, contextMenu);
   addDestructor(()=> contextMenu.removeChild(menuitem) );
   
})(document.getElementById("contentAreaContextMenu") );

bunda1
Спасибо, только проблема одна, когда нажимаю СКМ, то меню не закрывается, а вкладка открывается вне группы вкладок (использую TU), если например вкладка по середине группы, то поиск откроется за последней вкладкой группы. Хотелось бы чтобы вкладка открывалась как обычные ссылки открываются и срабатывал механизм создания группы вкладок.
s_1432008734_5651312_2f13ca2846.jpg

Kamui пишет

bunda1
Спасибо, только проблема одна, когда нажимаю СКМ, то меню не закрывается

Выделить код

Код:

// Добавить новый пункт "Поиск изображения в google" в контекстном меню изображений ................................
((contextMenu) => {
   var menuitem = document.createElement("menuitem");   
   menuitem.setAttribute("label", "Поиск изображения в google");
   menuitem.onclick =e=> {
      var url = 'http://www.google.com/searchbyimage?image_url=' +
                 encodeURIComponent(gContextMenu.mediaURL || gContextMenu.imageURL || gContextMenu.bgImageURL);      
      e.button ? gBrowser.selectedTab = gBrowser.addTab(url) : loadURI(url);
      contextMenu.hidePopup();
   }
   contextMenu.insertBefore(menuitem, document.getElementById("context-viewimage"));
   
   addEventListener("popupshowing", ()=> menuitem.hidden = !gContextMenu.onImage, false, contextMenu);
   addDestructor(()=> contextMenu.removeChild(menuitem) );
   
})(document.getElementById("contentAreaContextMenu") );

вкладка открывается вне группы вкладок (использую TU), если например вкладка по середине группы, то поиск откроется за последней вкладкой группы. Хотелось бы чтобы вкладка открывалась как обычные ссылки открываются и срабатывал механизм создания группы вкладок

.
А как старый код открывал вкладки и что за группы вкладок.

bunda1 пишет

А как старый код открывал вкладки и что за группы вкладок.

Старый код открывал также. Группа вкладок на скриншоте это 4 первые вкладки с красным фоном:
s_1432008734_5651312_2f13ca2846.jpg
Создаются группы с помощью Tab Utilities при включенном параметре extensions.tabutils.autoStack;true и группируются вкладки автоматически при открытии ссылок со страницы.

Скорее всего надо расширение отредактировать чтобы оно обрабатывало gBrowser.addTab и создавало группу при этом событии, т.к. не только в этой кнопке вкладка открывается вне группы, так например в кнопке Translate при включённой опции "Перевод страницы в новой вкладке сразу справа", также открывается вкладка вне группы. Кстати как называется событие открытия ссылки?

Kamui

Скорее всего надо расширение отредактировать чтобы оно обрабатывало gBrowser.addTab и создавало группу при этом событии. Кстати как называется событие открытия ссылки?

Нет, надо вместо gBrowser.addTab использовать что другое, наверно:
gBrowser.loadOneTab( url, {relatedToCurrent: true, inBackground: true, referrerURI: makeURI(content.location.href)} )

Кстати как называется событие открытия ссылки?

Насчёт событие не знаю, но клик на ссылку запускает вот такую цепочку внутренних функций Firefox:
1. contentAreaClick(event, isPanelClick)
2. handleLinkClick(event, href, linkNode)
3. openLinkIn(url, where, params)
4. gBrowser.loadOneTab(aURI, aReferrerURI, aCharset, aPostData, aLoadInBackground, aAllowThirdPartyFixup)
5. gBrowser.addTab(aURI, aReferrerURI, aCharset, aPostData, aOwner, aAllowThirdPartyFixup)
Tab Utilities должно реагировать на одну из них, кроме gBrowser.addTab

bunda1
Кстати в кнопке Translate вкладки группируются если выбран перевод с заменой текста в Microsoft/Google. Я так понял потому что изначальная вкладка дублируется, а уже после применяется код для перевода? Может быть также сделать и здесь?

Kamui
Вот так вроде работает в "Поиск изображения в google":

Выделить код

Код:

e.button ? openLinkIn(url, "tabshifted", {relatedToCurrent: true, inBackground: true, referrerURI: makeURI(content.location.href)}) : loadURI(url);

21-05-2015 19:04:57
а в кнопке Translate:

Выделить код

Код:

cbu.getPrefs("Translate.nextPage")
        ? openLinkIn(url, "tabshifted", {relatedToCurrent: true, inBackground: true, referrerURI: makeURI(content.location.href)})
        : loadURI(url);

bunda1
Спасибо, отлично работает:D

Поможите плиз с проблемкой https://forum.mozilla-russia.org/viewtopic.php?id=67530

bunda1
Как выяснилось, в самом TU можно решить проблему группировки вкладок №664 :)

Еще попытался в кнопку отсюда добавить обработку кликов СКМ, прошу посмотреть и может что-то дополнить. Хотелось бы чтобы поиск по СКМ открывался в фоновой вкладке. Или ЛКМ в фоновой, а СКМ в активной новой вкладке, т.к. поиск в текущей странице редко используется, поэтому ЛКМ можно открывать поиск в фоновой, а текущую просто закрыть при необходиости.

скрытый текст

Выделить код

Код:

// Добавить подменю "Поиск изображения в ..." в контекстном меню изображений, от 01.10.2014 .............
(function() {  
  var contextMenu = document.getElementById("contentAreaContextMenu");  
  
  var menu = document.createElement("menu");      
  menu.setAttribute("label", "Поиск изображения в ...");  
  contextMenu.insertBefore( menu, document.getElementById("context-viewimage") ); 
  addEventListener("popupshowing", function() menu.hidden = !gContextMenu.onImage, false, contextMenu );
  addDestructor(function() contextMenu.removeChild(menu) );
  
  var array = [
        [ 'Google', 'https://www.google.lv/favicon.ico', 'http://www.google.com/searchbyimage?image_url=' ],
        [ 'Tineye', 'http://tineye.com/favicon.ico', 'http://tineye.com/search?pluginver=bookmark_1.0&url=' ],
        [ 'Яндекс', 'http://yastatic.net/morda-logo/i/favicon_islands.ico', 'http://yandex.ru/images/search?rpt=imageview&img_url=' ]        
              ];
  var menuPopup = menu.appendChild( document.createElement("menupopup") );              
  array.forEach(function( m ) { 
       var mItem = menuPopup.appendChild( document.createElement("menuitem") );
       mItem.setAttribute("label", m[0]);       
       mItem.setAttribute("image", m[1]);
       mItem.setAttribute("class", "menuitem-iconic");
       mItem.finder = m[2];
  });
  
  menuPopup.onclick =e=> {
     var url= e.target.finder +
              encodeURIComponent(gContextMenu.imageURL);
     e.button ? gBrowser.selectedTab = gBrowser.addTab(url) : loadURI(url);
     setTimeout(function() { document.getElementById("contentAreaContextMenu").hidePopup() }, 20);
  };  
})();

04-06-2015 20:03:27
Разобрался сам со своими запросами, но все равно прошу проверить:

скрытый текст

Выделить код

Код:

// Добавить подменю "Поиск изображения в ..." в контекстном меню изображений, от 01.10.2014 .............
(function() {  
  var contextMenu = document.getElementById("contentAreaContextMenu");  
  
  var menu = document.createElement("menu");      
  menu.setAttribute("label", "Search Image In ...");  
  contextMenu.insertBefore( menu, document.getElementById("context-viewimage") ); 
  addEventListener("popupshowing", function() menu.hidden = !gContextMenu.onImage, false, contextMenu );
  addDestructor(function() contextMenu.removeChild(menu) );
  
  var array = [
        [ 'Google', 'https://www.google.lv/favicon.ico', 'http://www.google.com/searchbyimage?image_url=' ],
        [ 'Tineye', 'http://tineye.com/favicon.ico', 'http://tineye.com/search?pluginver=bookmark_1.0&url=' ],
        [ 'Яндекс', 'http://yastatic.net/morda-logo/i/favicon_islands.ico', 'http://yandex.ru/images/search?rpt=imageview&img_url=' ]        
              ];
  var menuPopup = menu.appendChild( document.createElement("menupopup") );              
  array.forEach(function( m ) { 
       var mItem = menuPopup.appendChild( document.createElement("menuitem") );
       mItem.setAttribute("label", m[0]);       
       mItem.setAttribute("image", m[1]);
       mItem.setAttribute("class", "menuitem-iconic");
       mItem.finder = m[2];
  });
  
  menuPopup.onclick =e=> {
     var url= e.target.finder +
              encodeURIComponent(gContextMenu.imageURL);
     e.button ? gBrowser.selectedTab = gBrowser.addTab(url) : gBrowser.addTab(url);
     setTimeout(function() { document.getElementById("contentAreaContextMenu").hidePopup() }, 20);
  };  
})();

Kamui пишет

Разобрался сам со своими запросами, но все равно прошу проверить:

Всё отлично :)

bunda1 пишет
Kamui пишет

Разобрался сам со своими запросами, но все равно прошу проверить:

Всё отлично :)

Благодарю:) меня только смущает:

Выделить код

Код:

setTimeout(function() { document.getElementById("contentAreaContextMenu").hidePopup() }, 20);

Как-то изящней это можно сделать?

Kamui пишет

Как-то изящней это можно сделать?

Выделить код

Код:

setTimeout(()=> contextMenu.hidePopup(), 20);

04-06-2015 22:21:07

Выделить код

Код:

// Добавить подменю "Поиск изображения в ..." в контекстном меню изображений, от 01.10.2014 .............
((contextMenu) => {
  var menu = document.createElement("menu");      
  menu.setAttribute("label", "Search Image In ...");  
  contextMenu.insertBefore( menu, document.getElementById("context-viewimage") ); 
  addEventListener("popupshowing", ()=> menuitem.hidden = !gContextMenu.onImage, false, contextMenu);
  addDestructor(()=> contextMenu.removeChild(menuitem) );
  
  var array = [
        [ 'Google', 'https://www.google.lv/favicon.ico', 'http://www.google.com/searchbyimage?image_url=' ],
        [ 'Tineye', 'http://tineye.com/favicon.ico', 'http://tineye.com/search?pluginver=bookmark_1.0&url=' ],
        [ 'Яндекс', 'http://yastatic.net/morda-logo/i/favicon_islands.ico', 'http://yandex.ru/images/search?rpt=imageview&img_url=' ]        
              ];
  var menuPopup = menu.appendChild( document.createElement("menupopup") );              
  array.forEach(function( m ) { 
       var mItem = menuPopup.appendChild( document.createElement("menuitem") );
       mItem.setAttribute("label", m[0]);       
       mItem.setAttribute("image", m[1]);
       mItem.setAttribute("class", "menuitem-iconic");
       mItem.finder = m[2];
  });
  
  menuPopup.onclick =e=> {
     var url = e.target.finder +
              encodeURIComponent(gContextMenu.imageURL);
     e.button ? gBrowser.selectedTab = gBrowser.addTab(url) : gBrowser.addTab(url);
     setTimeout(()=> contextMenu.hidePopup(), 20);
  };
  
})(document.getElementById("contentAreaContextMenu") );

bunda1
Изменил:

скрытый текст
// Добавить подменю "Поиск изображения в ..." в контекстном меню изображений, от 01.10.2014 .............
((contextMenu) => {
  var menu = document.createElement("menu");     
  menu.setAttribute("label", "Search Image In ..."); 
  contextMenu.insertBefore( menu, document.getElementById("context-viewimage") );
  addEventListener("popupshowing", ()=> menuitem.hidden = !gContextMenu.onImage, false, contextMenu);
  addDestructor(()=> contextMenu.removeChild(menuitem) );
 
  var array = [
        [ 'Google', 'https://www.google.lv/favicon.ico', 'http://www.google.com/searchbyimage?image_url=' ],
        [ 'Tineye', 'http://tineye.com/favicon.ico', 'http://tineye.com/search?pluginver=bookmark_1.0&url=' ],
        [ 'Яндекс', 'http://yastatic.net/morda-logo/i/favicon_islands.ico', 'http://yandex.ru/images/search?rpt=imageview&img_url=' ]       
              ];
  var menuPopup = menu.appendChild( document.createElement("menupopup") );             
  array.forEach(function( m ) {
       var mItem = menuPopup.appendChild( document.createElement("menuitem") );
       mItem.setAttribute("label", m[0]);       
       mItem.setAttribute("image", m[1]);
       mItem.setAttribute("class", "menuitem-iconic");
       mItem.finder = m[2];
  });
 
  menuPopup.onclick =e=> {
     var url = e.target.finder +
              encodeURIComponent(gContextMenu.imageURL);
     e.button ? gBrowser.selectedTab = gBrowser.addTab(url) : gBrowser.addTab(url);
     setTimeout(()=> contextMenu.hidePopup(), 20);
  };
 
})(document.getElementById("contentAreaContextMenu") );

иначе пункт меню появлялся везде.

Еще хотел добавить к этому пункту иконку, пробовал так:

скрытый текст

Выделить код

Код:

menu.setAttribute("class", "menuitem-iconic");
  menu.setAttribute("image", "https://www.google.lv/favicon.ico");


но ничего не получилось, как это можно сделать?

Kamui
addDestructor(()=> contextMenu.removeChild(menu) );

05-06-2015 07:25:04
  menu.setAttribute("class", "menu-iconic");

bunda1 пишет

addDestructor(()=> contextMenu.removeChild(menu) );

Точно, а то я и смотрю что старый пункт не исчезает при редактировании кнопки:D

И с иконкой разобрался, спасибо:)

конечный вариант скиньте плиз, если не сложно;)

emlen пишет

конечный вариант скиньте плиз, если не сложно;)

Выделить код

Код:

// Добавить подменю "Поиск изображения в ..." в контекстном меню изображений, от 05.06.2015. .............
((contextMenu) => {
  var menu = document.createElement("menu");      
  menu.setAttribute("label", "Search Image In ...");
  menu.setAttribute("class", "menu-iconic");
  menu.setAttribute("image", "https://www.google.lv/favicon.ico");
  
  contextMenu.insertBefore( menu, document.getElementById("context-viewimage") ); 
  addEventListener("popupshowing", ()=> menu.hidden = !gContextMenu.onImage, false, contextMenu);
  addDestructor(()=> contextMenu.removeChild(menu) );
  
  var array = [
        [ 'Google', 'https://www.google.lv/favicon.ico', 'http://www.google.com/searchbyimage?image_url=' ],
        [ 'Tineye', 'http://tineye.com/favicon.ico', 'http://tineye.com/search?pluginver=bookmark_1.0&url=' ],
        [ 'Яндекс', 'http://yastatic.net/morda-logo/i/favicon_islands.ico', 'http://yandex.ru/images/search?rpt=imageview&img_url=' ]        
              ];
  var menuPopup = menu.appendChild( document.createElement("menupopup") );              
  array.forEach(function( m ) { 
       var mItem = menuPopup.appendChild( document.createElement("menuitem") );
       mItem.setAttribute("label", m[0]);       
       mItem.setAttribute("image", m[1]);
       mItem.setAttribute("class", "menuitem-iconic");
       mItem.finder = m[2];
  });
  
  menuPopup.onclick =e=> {
     var url = e.target.finder +
              encodeURIComponent(gContextMenu.imageURL);
     e.button ? gBrowser.selectedTab = gBrowser.addTab(url) : gBrowser.addTab(url);
     setTimeout(()=> contextMenu.hidePopup(), 20);
  };
  
})(document.getElementById("contentAreaContextMenu") );

Да пусть знают, не жалко. А насчёт сконвертить в png или gif чтоб меньше были спасыбо, не знал что так менше.

Выделить код

Код:

menu.setAttribute("image", "https://www.google.lv/favicon.ico");

кажет все время гуглоиконку, а можно как-то сохранять и показывать к примеру иконку последней выбранной системы.. хотя не критично, может и вовсе там иконка не нуна)

okkamas_knife пишет

вообще есть удобная софтина IcoFX - на портаблеаппс есть портабельный вариант

Официальная бесплатная версия и так портативна - IcoFX 1.6.4 Free Portable Edition. Правда с оф. сайта её убрали :angry:, но в интернетах найти можно.

okkamas_knife пишет

и еще хитрость чем меньше цветов юзается тем меньше размер а уменьшить их иногда можно убрав градиенты и 'лишние" пиксели (например когда один по цвету не сильно отличается от окружающих можно его сделать таким же и на иконке это не отразится а цветов меньше станет)

Для этого хорошо использовать GIMP (я предпочитаю старую версию 2.4.6 portable - меньше по размеру и удобней в управлении, чем новые, имхо) - допустим, есть исходник в виде 8-ми битной (256 цветов) иконки - открываем её в GIMP, сохраняем как 4-х битную (16 цветов, не знаю как GIMP это делает, но качество останется не намного хуже, чем при 256 цветах) - далее сохраняем изменённую иконку, как gif. В итоге значок 16х16 весит всего 216 байт:
7sfpapct.gif

p.s.
Если пользоваться Total Commander, то к нему есть удобные плагины: ICO wcx и ICONew для вытаскивания отдельных иконок из .ico, ICLView - получить исходник иконки в png или bmp (но лучше для этого юзать nconvert), ICLRead - можно выдирать иконки из dll или exe (временно добавив к ним расширение .icl).
Также весьма удобен упомянутый nconvert совместно с TC, для конвертации иконок/изображений в разные форматы, например:
пользовательская команда:

Выделить код

Код:

[em_ncgif128]
button=%COMMANDER_PATH%\Icons\etcbar.dll,598
cmd=cmd /c ""%COMMANDER_PATH%\Scripts\ncgif128.bat"
param=%S"
menu=Конвертировать изображение(я) в gif 7-bit
iconic=1

ncgif128.bat:

Выделить код

Код:

@echo off 
:loop 
if -%1==- cls && goto :EOF 
"%COMMANDER_PATH%\Bin\XnView\nconvert.exe" -out gif -colors 128 -D %1
shift 
goto loop

А для уменьшения размеров картинок можно использовать https://github.com/lorents17/iCatalyst
Очень полезная вещь, рекомендую.

https://github.com/lorents17/iCatalyst/ … ADME.RU.md
http://forum.ru-board.com/topic.cgi?for … art=380#lt

У меня почему-то двоится в контекстном меню:
xmfdjaY.png

Как исправить? Mozilla Firefox for Linux Mint (40.0.3).
Создавал новую кнопку и использовал конечный вариант кода из поста №35 на этой странице.
===============================================================================
И само как-то исправилось! Теперь как надо. Чудеса!:)

bunda1
А можно, чтобы страница поиска открывалась активной, а то сейчас в фоне, приходится делать лишние движения.

Ultima2m пишет

bunda1
А можно, чтобы страница поиска открывалась активной, а то сейчас в фоне, приходится делать лишние движения.

Замени:

Выделить код

Код:

e.button ? gBrowser.selectedTab = gBrowser.addTab(url) : gBrowser.addTab(url);

на

Выделить код

Код:

gBrowser.selectedTab = gBrowser.addTab(url);

bunda1 Спасибо, все ОК

bunda1
И опять стало двоиться в контекстном меню (см. пост№40).
С чем может быть связано такое непостоянство?

Garider пишет

bunda1
И опять стало двоиться в контекстном меню (см. пост№40).
С чем может быть связано такое непостоянство?

Наверно ты установил у себя два кода №35
Кстати:

Выделить код

Код:

// Добавить подменю "Поиск изображения в ..." в контекстном меню изображений, от 05.09.2015. .............
((contextMenu, viewimage)=> {

  var menu = contextMenu.insertBefore(document.createElement("menu"), viewimage); 
  menu.setAttribute("label", "Поиск изображения в ...");
  menu.setAttribute("class", "menu-iconic");
  menu.setAttribute("image", "https://www.google.lv/favicon.ico");
  addEventListener("popupshowing", ()=> menu.hidden = viewimage.hidden, true, contextMenu);
  addDestructor(()=> contextMenu.removeChild(menu));
  
  var array = [
        [ 'Google', 'https://www.google.lv/favicon.ico', 'http://www.google.com/searchbyimage?image_url='],
        [ 'Bing', 'https://www.bing.com/s/a/bing_p.ico', 'http://www.bing.com/images/searchbyimage?FORM=IRSBIQ&cbir=sbi&imgurl='],
        [ 'Tineye', 'http://tineye.com/favicon.ico', 'http://tineye.com/search?pluginver=bookmark_1.0&url='],
        [ 'Яндекс', 'http://yastatic.net/morda-logo/i/favicon_islands.ico', 'http://yandex.ru/images/search?rpt=imageview&img_url=']        
              ];
  var menuPopup = menu.appendChild(document.createElement("menupopup"));              
  array.forEach((m)=> {
     var mItem = menuPopup.appendChild(document.createElement("menuitem"));
     mItem.setAttribute("label", m[0]);       
     mItem.setAttribute("image", m[1]);
     mItem.setAttribute("class", "menuitem-iconic");
     mItem.finder = m[2];
  });
  
  menuPopup.onclick =e=> {
     var url = e.target.finder + encodeURIComponent(gContextMenu.imageURL);
     e.button ? gBrowser.addTab(url) : gBrowser.selectedTab = gBrowser.addTab(url);
     setTimeout(()=> contextMenu.hidePopup(), 20);
  };
  
})(document.getElementById("contentAreaContextMenu"), document.getElementById("context-viewimage"));
bunda1 пишет

Наверно ты установил у себя два кода №35

Нет, я код первым делом проверил. Если добавить или перенести кнопку в другое место, то двоения нет.
Вроде нашёл причину. У меня установлена Puzzle Панель :: Дополнения Firefox, я эту кнопку перенёс на нижнюю панель, теперь всё норм. А когда она была на боковой панели (справа), то двоилось. Как-то так.

Извините немного оффтопика, но просто тут по теме упоминали редакторы изображений, а есть что-то оффлайновое, чтобы принимало изображение в формате base64?
Иногда хочется взять иконку по быстренькому в base64, благо кнопочек таких понаделали тут, а потом слегка ее подредактировать, тональность сменить к примеру. А куда ее в base64 импортнуть можно ума не приложу..

emlen
i-6426.jpg

oleg.sgh, извините меня за твердолобость, но как

это
i-6426.jpg

позволит мне изменить тональность иконки, которая у меня на руках в base64?

emlen
Я тветил на вопрос как сделать свою картинку в  base64.
Получившийся код картинки можно копировать и вставлять в нужное место кода кнопки где нужно сменить картинку.

oleg.sgh, а где звучал такой вопрос?:)

emlen
Значит я не так понял. Извините.

emlen
Так что требуется, сохранить изображение и открыть его в редакторе?

bunda1 пишет

emlenТак что требуется, сохранить изображение и открыть его в редакторе?

да, из исходного base64 в данном случае, в другой ветке я поднимал вопрос про сохранение изображения для пересылки в том же telegram... а тут весь интерес полноценно юзать base64, чтобы и туды и обратно прозрачно конвертило...

oleg.sgh пишет

emlenЗначит я не так понял. Извините.

А Вы меня извините за занудство;)

А зачем именно base64?

bunda1 пишет

А зачем именно base64?

Ибо уже на него все завязано в кастом баттонзе.. удобно..

Как -то не закончен вариант с этими поисками, почему бы их не объединить, тот что поиск выделенного на странице текста делает с выбором поисковика из меню с сабжем, плюс прикрутить к этому всему загрузку картинки из файла - вот была бы чудесная кнопка... Я сегодня генератор идей))

Исправил Поиск изображения в google из контекстного меню изображений и Добавить подменю "Поиск изображения в ..." в контекстном меню изображений для FF64+

bunda1 пишет

Исправил...для FF64+

Спасибо, в Waterfox 56 тоже работает.