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

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№175131-07-2017 12:06:02

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

Re: Обсуждение кнопок CB

bunda1 пишет:

Gladius333 пишет:

Вопрос можно кроме меню "допольнительно", добавить еще одно меню?
==================================
Или можно добавить в меню-еще меню, к примеру
------------------------------------------------
дополнительно[выпадающее меню]
---линкс[выпадающее меню-сами ссылки]
---разное[выпадающее меню-сами ссылки]
-

Конечно можно, только я не понял что именно требуется.

Второй вариант с подменю, а первый можно как пример? я его сохраню чтобы потом не задавать вопрос.
1)"допольнительно", добавить еще одно меню?
--Дополнительно=[сами ссылки]
--Что то...=[сами ссылки]
------------------------------------------------
2)
---дополнительно=[выпадающее меню]
===линкс=[выпадающее меню-сами ссылки]
===разное=[выпадающее меню-сами ссылки]

Отредактировано Gladius333 (31-07-2017 18:00:29)

Отсутствует

 

№175231-07-2017 13:45:29

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

Re: Обсуждение кнопок CB

Все равно не понял что именно требуется, но вот пример:

Выделить код

Код:

((contextMenu, el)=> {
   var menu = document.createElement("menu");
   menu.setAttribute("label", "дополнительно");
   menu.setAttribute("id", "context-ext-addon");
   contextMenu.insertBefore(menu, contextMenu.children[el]);
   addDestructor(()=> menu.remove() );

var array = [
   ["дополнительно1"],
   ["Искать логин на Login2",function(){window.open('http://login2.me/#'+location.hostname,'login2.me_'+location.hostname,'width=500,height=400,left=500,top=100,scrollbars=yes,location=no')}],
   ["Искать логин на Loginz",function(){window.open('http://loginz.org/view/'+location.hostname,'loginz_'+location.hostname,'width=500,height=400,left=500,top=100,scrollbars=yes,location=no')}],
   ["Искать логин на ByPass",function(){window.open('https://bypass.org.ru/login/'+location.hostname,'bypass_'+location.hostname,'width=500,height=400,left=500,top=100,scrollbars=yes,location=no')}],
   ["Искать логин на BugMeNot",function(){window.open('http://bugmenot.com/view/'+location.hostname,'bugmenot_'+location.hostname,'width=500,height=400,left=500,top=100,scrollbars=yes,location=no')}],
   ["separator"],
   ["Набрать сообщение в форме", function(){window.open('http://southron4965.ucoz.ru/files/Opera_LE/html/forma.html')}],
   ["Искать страницу на Archive.org",function(){window.open('http://web.archive.org/web/*/'+location.href)}],
   ["дополнительно2"],
   ["Посмотреть отзывы о сайте в WOT",function(){window.open('https://www.mywot.com/ru/scorecard/'+location.hostname)}],
   ["Информация о сервере (netcraft)",function(){window.open('http://toolbar.netcraft.com/site_report?url='+location.hostname)}],
   ["Проверить доступность сайта через isitdownrightnow.com",function(){window.open('http://www.isitdownrightnow.com/downorjustme.php?url='+location.hostname,'DownForMe_'+location.hostname,'width=600,height=400,left=100,top=100,scrollbars=yes,location=no')}],
   ["separator"],
   ["Узнать, кому принадлежит домен через Domaintools",function(){window.open('http://whois.domaintools.com/'+location.hostname)}],
   ["Узнать, кому принадлежит домен через Reg.ru",function(){window.open('https://www.reg.ru/whois/?dname='+location.hostname)}],
   ["дополнительно3"],
   ["Удалить куки текущего сайта", "deleteCookiesFromHost()"],
   ["Искать страницу в кэше Google",function(){window.open('http://www.google.com/search?q=cache:'+location.href)}],
];
var menuPopup = menu.appendChild( document.createElement("menupopup") );
var subMenu, subMenupopup; 
array.forEach(m=> {
   if ( m.length == 1 && m[0] != "separator" ) {
        subMenu = menuPopup.appendChild(document.createElement("menu"));
        subMenu.setAttribute("label", m[0]);
        subMenupopup = subMenu.appendChild(document.createElement("menupopup"));  
        return;
        }
   if ( m[0] == "separator"  ) { subMenupopup.appendChild(document.createElement("menuseparator")); return };
   
   var mItem = subMenupopup.appendChild(document.createElement("menuitem"));
   mItem.setAttribute("label", m[0]);
   typeof(m[1]) == "string"
   ? mItem.addEventListener("command", ()=> eval(m[1]))
   : mItem.addEventListener("command", ()=> content.location.href = "javascript:(" + encodeURI(m[1]) + ")()");
});

   
   function deleteCookiesFromHost() {
      var host = Services.eTLD.getBaseDomain(gBrowser.currentURI);

      for ( var en = Services.cookies.enumerator; en.hasMoreElements(); ) {
            var cookie = en.getNext().QueryInterface(Ci.nsICookie);
            ~cookie.host.indexOf(host.trim()) && Services.cookies.remove(cookie.host, cookie.name, cookie.path, false); 
            }
   
      var reversedDomain = host.split("").reverse().join("") + ".";
      Cu.import("resource://gre/modules/FileUtils.jsm");
      var file = FileUtils.getFile("ProfD", ["webappsstore.sqlite"]);
      var dbConn = Services.storage.openDatabase(file);
      dbConn.executeSimpleSQL("DELETE FROM webappsstore2 WHERE scope LIKE \"%" + reversedDomain +"%\"");
      dbConn.close();
   
      var dir = Services.dirsvc.get('Home', Ci.nsIFile);
      dir.append("Application Data");
      dir.append("Macromedia");
      dir.remove(true);
      dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777);
   };
})(document.getElementById("contentAreaContextMenu"), "context-inspect");

Отсутствует

 

№175331-07-2017 18:04:02

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

Re: Обсуждение кнопок CB

bunda1 пишет:

Все равно не понял что именно требуется, но вот пример:

Выделить код

Код:

((contextMenu, el)=> {....

Да то что надо, мне скинули кое-что пока разбераюсь) спс!
Еще хотел как пример без подменю, к примеру у нас было одно "дополнительно", подним без подменю другое "дополнительно".

Отсутствует

 

№175431-07-2017 18:29:00

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

Re: Обсуждение кнопок CB

Gladius333 пишет:

к примеру у нас было одно "дополнительно", подним без подменю другое "дополнительно".

Куда поднимим :cry:

Отсутствует

 

№175531-07-2017 19:08:41

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

Re: Обсуждение кнопок CB

bunda1 пишет:

Gladius333 пишет:

к примеру у нас было одно "дополнительно", подним без подменю другое "дополнительно".

Куда поднимим :cry:

Тоже самое только (где красные) и только одно подменю.

скрытый текст
http://i.imgur.com/oJ3zLOc.png

Отредактировано Gladius333 (31-07-2017 19:09:00)

Отсутствует

 

№175631-07-2017 21:02:23

oleg953
Участник
 
Группа: Members
Откуда: Ростов где Дон
Зарегистрирован: 07-05-2014
Сообщений: 524
UA: Firefox 52.0

Re: Обсуждение кнопок CB

:angry:

Отредактировано oleg953 (01-08-2017 22:25:22)

Отсутствует

 

№175701-08-2017 15:31:29

bugmenot
Участник
 
Группа: Members
Зарегистрирован: 29-01-2012
Сообщений: 32
UA: Firefox 45.0

Re: Обсуждение кнопок CB

Может ли кнопка узнать, посещалась ли ссылка или нет? Я в курсе, что псевдокласс :visited недоступен для проверки в целях безопасности, но локальное расширение по логике таких ограничений иметь не должно...

Отсутствует

 

№175801-08-2017 23:35:07

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1024
UA: Seamonkey 2.40

Re: Обсуждение кнопок CB

bugmenot пишет:

Может ли кнопка узнать, посещалась ли ссылка или нет?

Может-может. Причём не только - посещалась ли, но и когда именно.
У меня стоит расширение Link Status Redux, которое для ссылки, на которую мышка наведена, показывает это в строке статуса.

Отредактировано yup (01-08-2017 23:38:00)

Отсутствует

 

№175902-08-2017 07:34:29

bugmenot
Участник
 
Группа: Members
Зарегистрирован: 29-01-2012
Сообщений: 32
UA: Firefox 45.0

Re: Обсуждение кнопок CB

yup пишет:

Может-может.

Уже отлично. А не подкинет ли многоуважаемый all кусочек кода на сию тему, чтобы не раскапывать это в расширениях?..

Отсутствует

 

№176002-08-2017 12:41:44

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1024
UA: Seamonkey 2.40

Re: Обсуждение кнопок CB

bugmenot
Как отправная точка: https://developer.mozilla.org/en-US/doc … query_URIs и https://developer.mozilla.org/en-US/doc … ry_service

Отредактировано yup (02-08-2017 12:44:03)

Отсутствует

 

№176102-08-2017 20:13:51

bugmenot
Участник
 
Группа: Members
Зарегистрирован: 29-01-2012
Сообщений: 32
UA: Firefox 45.0

Re: Обсуждение кнопок CB

Расковырял-таки расширение и собрал вот такой код.

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

Выделить код

Код:

      var iosvc = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
      var query = PlacesUtils.history.getNewQuery();
      var queryOptions = PlacesUtils.history.getNewQueryOptions();
      queryOptions.includeHidden = true;
      queryOptions.maxResults = 1;
      queryOptions.resultType = queryOptions.RESULTS_AS_VISIT;
      queryOptions.sortingMode = queryOptions.SORT_BY_DATE_DESCENDING;

      var isVisited = function(link)
      {
        try
        {
          uri1 = iosvc.newURI(link, null, null);
        }
        catch (e if e.result == Components.results.NS_ERROR_MALFORMED_URI)
        {
          uri1 = null;
        }

        query.uri = uri1;
        var results = PlacesUtils.history.executeQuery(query, queryOptions).root;
        results.containerOpen = true;
        return results.hasChildren;
      }


С одной стороны, работает, с другой, нет ли тут косяков и подводных камней, пропущенных по незнанию?

Отсутствует

 

№176203-08-2017 04:24:41

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1024
UA: Seamonkey 2.40

Re: Обсуждение кнопок CB

bugmenot пишет:

нет ли тут косяков и подводных камней, пропущенных по незнанию?

1. Mozilla не рекомендует использовать конструкцию "catch (e if ...)".
Тем более, что в данном случае её можно совершенно безболезненно переписать как:

Выделить код

Код:

catch (e) {
  if e.result == Components.results.NS_ERROR_MALFORMED_URI) uri1 = null;
}

2. Mozilla же рекомендует пользоваться асинхронными методами, а там это выглядит примерно так:

Выделить код

Код:

var iosvc = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
var asyncHistory = Components.classes["@mozilla.org/browser/history;1"].getService(Components.interfaces.mozIAsyncHistory);

var uri = iosvc.newURI(link, null, null);

asyncHistory.isURIVisited(uri, function(uri, isVisited) {
  if (isVisited) alert('visited')
  else alert('not visited');
});

В синхронном nsIGlobalHistory2 описана функция isVisited(), но, похоже, что это дело из [firefox] уже выкосили.

Отредактировано yup (03-08-2017 04:51:54)

Отсутствует

 

№176303-08-2017 08:18:30

bugmenot
Участник
 
Группа: Members
Зарегистрирован: 29-01-2012
Сообщений: 32
UA: Firefox 45.0

Re: Обсуждение кнопок CB

2yup
Спасибо, catch поправлю. Асинхронность пока что не нужна, но информация полезная, пригодится.

yup пишет:

В синхронном nsIGlobalHistory2 описана функция isVisited(), но, похоже, что это дело из  уже выкосили.

Да, сначала с нее и попытался начать.

Отсутствует

 

№176403-08-2017 11:48:43

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1024
UA: Seamonkey 2.40

Re: Обсуждение кнопок CB

bugmenot пишет:

Асинхронность пока что не нужна

Но тотальный переход на WebExtensions уже вот-вот, а там history.search() - асинхронная.
Так что если беспокоиться о предстоящих переделках, то лучше асинхронность в конструкцию сразу закладывать.

Отсутствует

 

№176503-08-2017 12:49:20

bugmenot
Участник
 
Группа: Members
Зарегистрирован: 29-01-2012
Сообщений: 32
UA: Firefox 45.0

Re: Обсуждение кнопок CB

yup пишет:

Но тотальный переход на WebExtensions уже вот-вот, а там history.search() - асинхронная.Так что если беспокоиться о предстоящих переделках, то лучше асинхронность в конструкцию сразу закладывать.

Да, придется. Спасибо еще раз.

Отредактировано bugmenot (03-08-2017 12:49:35)

Отсутствует

 

№176604-08-2017 22:05:45

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

Re: Обсуждение кнопок CB

bugmenot пишет:

yup пишет:

Но тотальный переход на WebExtensions уже вот-вот, а там history.search() - асинхронная.Так что если беспокоиться о предстоящих переделках, то лучше асинхронность в конструкцию сразу закладывать.

Да, придется. Спасибо еще раз.

А что делает твоя кнопка? просто я вбил ничего не заметил, как она работает?
Понял из комментов что она показывает посещалось ли ссылка, но в работе я так и не понял...

Отсутствует

 

№176704-08-2017 23:18:27

bugmenot
Участник
 
Группа: Members
Зарегистрирован: 29-01-2012
Сообщений: 32
UA: Firefox 45.0

Re: Обсуждение кнопок CB

Gladius333 пишет:

А что делает твоя кнопка? просто я вбил ничего не заметил, как она работает?Понял из комментов что она показывает посещалось ли ссылка, но в работе я так и не понял...

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

Отсутствует

 

№176812-08-2017 15:51:52

mokujin
Участник
 
Группа: Members
Зарегистрирован: 17-02-2017
Сообщений: 111
UA: unknown 0.0

Re: Обсуждение кнопок CB

Привет.
Подскажите как; в конт. меню страницы(обычном станд. ПКМ) есть пункты добавляемые расширениями. Этих пунктов может быть не один, но всех их зовут одинаково. Я написал действия для этих пунктов, ф-цию-листенер на действия мыши(case 0,1,2). Все работает правильно и как надо, но сейчас держу две ф-ции для двух разных ID. Вопрос такой:
- как повесить одно-и-тоже действие на два(три, пять) разных id в меню ?

Сейчас это так(две абсолютно одинаковых ф-ции , различия только в id):

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

Выделить код

Код:


// -----------------  Для расширения MediaSnifer\Video-Sniffer действия для кликов  --------------------------------------------------------
(function() {
   addEventListener("click", function(e) {
   
      if(e.target.id != "mediasniffer") return;
    
          var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
          var ref = ('"' + content.document.location + '"');
          var domain = content.document.domain.replace(/^www./g,'');
          var url = ('"' + e.target.getAttribute("tooltiptext") + '"');
          var title = convertFromUnicode("Windows-1251", gBrowser.mCurrentTab.label);

       switch (e.button) {
// скачать через wget или aria
           case 0:
              e.preventDefault();
              e.stopPropagation();
  
             if ( domain == "xvideos.com" ) { var url=url.replace(/p\d+\.ts/ig, 'p\.m3u8'); }

       file.initWithPath(file.path + "\\Soft\\wget\\wgetfile.cmd");
          var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
       process.init(file);
       process.run(false, [url, title.replace(/(?:@|#|&|\\|\/|\.|,|\||\:)+/g,'').slice(0,65), ref], 3);
          break;
          
// скопировать ссылку-подсказку
           case 1:
              var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
              var tt = e.target.getAttribute("tooltiptext");
            gClipboard.write( decodeURIComponent(tt) );
            alertsService.showAlertNotification(e.target.image, null, "Скопировал ссылку Mediasniffer-a", false, "", null, ""); 
                 break;          

// Открыть в Smplayer
           case 2:
//            var param = "-add-to-playlist";
            var url = e.target.getAttribute("tooltiptext");
            var file = Services.dirsvc.get('ProfD', Ci.nsIFile);

      file.initWithPath(file.path + "\\Soft\\PotPlayer\\PotPlayerMini.exe");
           var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
        process.init(file);
        process.run(false, [url, "/add"], 2 );
        break;
  }
 }, false, document.getElementById("contentAreaContextMenu"));
})();

// и ниже , точно тоже самое, только с разницей в 
//    if(e.target.id != "video-sniffer") return;


пробовал так сделать

Выделить код

Код:

   if(e.target.id != ("mediasniffer" || "video-sniffer")) return;

срабатывает только на первом id , для второго нет. :rolleyes:

Отредактировано mokujin (12-08-2017 15:55:50)

Отсутствует

 

№176912-08-2017 18:11:58

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1024
UA: Seamonkey 2.40

Re: Обсуждение кнопок CB

mokujin пишет:

срабатывает только на первом id , для второго нет.

Да и на первом-то срабатывать не должно.

Выделить код

Код:

if((e.target.id != "mediasniffer") && (e.target.id != "video-sniffer")) return;

или

Выделить код

Код:

if(["mediasniffer", "video-sniffer"].indexOf(e.target.id) < 0) return;

Отредактировано yup (12-08-2017 18:15:34)

Отсутствует

 

№177013-08-2017 05:37:10

mokujin
Участник
 
Группа: Members
Зарегистрирован: 17-02-2017
Сообщений: 111
UA: unknown 0.0

Re: Обсуждение кнопок CB

блиииин... делал точно такуюж конструкцию, а заместо и(&&) писал или( || )  и не работало.  http://www.kolobok.us/smiles/big_standart/fool.gif 
:)
Пасиб, второй пример тоже в копилку, пригодицца.   
Благодарю.

Отсутствует

 

Board footer

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