Есть такой плугин для FF Media Sniffer Все что он делает - это ловит ссылку на поток из flashplayer-a(или html5) и добавляет эту ссылку в меню страницы в виде пункта. У пункта(~ов) один и тотже id = "mediasniffer".
И если зайти на сайт где поток отдается частями, то и пунктов этих будет расти немерянно, на каждый "кусочек" будет +menuitem. Подскажите , как засунуть это все в подменю. В идеале чтоб оно вообще открывалось только по клику(игнор по наведению мыши) но это не обязательно.
картина такая у этого расширения, пункты меню acf85c428d92cdd66275dfeff7854fae.jpeg

код самого расширения это один файл bootstrap.js(оно очень маленькое 8kb). Кусок с пунктом меню, если пральна понял, такой:

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

Выделить код

Код:

function showContextMenu(event) {
    var popup = event.target || event.originalTarget;
    if (popup !== event.currentTarget)
        return;

    var win = popup.ownerDocument.defaultView;
    var doc = win.document;

    removeChild(popup);

    var media = win.content._media;
    if (!(media && media.length)) return;

    for (var i = 0, len = media.length; i < len; i++) {
        var m = media[i];
        var mi = doc.createElement('menuitem');
        mi.setAttribute('label', m.label);
        mi.setAttribute('tooltiptext', m.url);
        mi.setAttribute('id', 'mediasniffer');
        mi.addEventListener('click', copyURL);
        popup.insertBefore(mi, popup.firstChild);

        if (!sep) {
            var sep = doc.createElement('menuseparator');
            sep.setAttribute('id', 'mediasniffer-sep');
            var insPos = doc.getElementById('mediasniffer');
            popup.insertBefore(sep, insPos.nextSibling);
        }
    }


-------
зы. получилось для него сделать листенеры для открытия ссылок в других программах, через [CB] а собрать эти пункты в одно меню не могу.

CB код, для расширения, добавляет действия

Выделить код

Код:

// -------------  Для расширения MediaSnifer действия для кликов пункту меню  --------------------------------------------------------
(function() {
 addEventListener("click", function(e) {
    if (e.target.id != "mediasniffer") return;
          var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
          var ref = ('"' + content.document.location + '"');
          
// скачать через wget или aria
    if ( e.button == 0 ) {
          var url = ('"' + e.target.getAttribute("tooltiptext") + '"');
          var title = convertFromUnicode("Windows-1251", gBrowser.mCurrentTab.label);
       file.initWithPath(file.path + "\\Soft\\wget\\wgetfile.cmd");
//       file.initWithPath(file.path + "\\Soft\\Tools\\aria2.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);
   }  

// скопировать ссылку-подсказку
    if ( e.button == 1 ) {
        var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
        var tt = e.target.getAttribute("tooltiptext");
          gClipboard.write(tt);
          alertsService.showAlertNotification(e.target.image, null, "Скопировал ссылку Mediasniffer-a", false, "", null, ""); 
          }
          
 // Открыть в Smplayer
    if ( e.button == 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\\SMplayer\\smplayer.exe");
      file.initWithPath(file.path + "\\Soft\\CherryPlayer\\CherryPlayer.exe");
           var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
        process.init(file);
        process.run(false, [url], 1 );
         }
 }, false, document.getElementById("contentAreaContextMenu"));
})();


Подскажите с кодом для подменю, чтоб добавить его в расширение.

xoreax
Вдруг будет интересно...
Точно так же находит прямые ссылки на видео и открывает их во внешних плеерах.
Video Assistant :: Дополнения Firefox