Как в последних ESR и полных версиях вставить свой пункт со своими действиями в контекстное меню для выделенного текста?

Zerdsa
ESR это и есть "полная" версия, все остальное широкий бетатестинг, неужели не понятно.
   
Вариант 1, написать расширение.
Вариант 2, написать Custom JS скрипт.
Вариант 3, написать user_chrome_files скрипт.
Вариант 4, написать CB скрипт.

_zt пишет

Zerdsa
ESR это и есть "полная" версия, все остальное широкий бетатестинг, неужели не понятно.
   
Вариант 1, написать расширение.
Вариант 2, написать Custom JS скрипт.
Вариант 3, написать user_chrome_files скрипт.
Вариант 4, написать CB скрипт.

А созданный файл (*.css если я правильно понимаю) в последних версиях FF куда кладётся?

Zerdsa
Туда же куда и в не последних. Только какое отношение это имеет к

Как в последних ESR и полных версиях вставить свой пункт со своими действиями в контекстное меню для выделенного текста?

с помощью css такого не сделать. И по css есть отдельный большой раздел на форуме.

_zt пишет

Zerdsa
Туда же куда и в не последних. Только какое отношение это имеет к

Как в последних ESR и полных версиях вставить свой пункт со своими действиями в контекстное меню для выделенного текста?

с помощью css такого не сделать. И по css есть отдельный большой раздел на форуме.

Так - понятно. По ходу не по адресу обратился.
На всякий случай и для саморазвития:
- userChrome.css из ...\profile.default\chrome\ из ESR 52

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

Выделить код

Код:

/*AGENT_SHEET*/
@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);

#placesContext .box-inherit.scrollbox-innerbox {
-moz-binding: url('data:application/xml,\
\
<?xml version="1.0"?>\%0A\
<bindings xmlns="http://www.mozilla.org/xbl">\%0A\
<binding id="placesContext_extraMenuitem">\%0A\
<implementation>\%0A\
<constructor>\%0A\
<![CDATA[\%0A\
var before = document.getElementById("placesContext_openSeparator");\%0A\
var popup = this.linkedPopup = this.parentNode.parentNode.parentNode;\%0A\
var menuitem = popup.insertBefore(document.createElement("menuitem"), before);\%0A\
menuitem.id = "placesContext_openContainer:window";\%0A\
menuitem.setAttribute("label", decodeURIComponent(\%0A\
"Открыть все ссылки в новом окне"\%0A\
));\%0A\
menuitem.setAttribute("oncommand", "this.cmd();");\%0A\
menuitem.cmd = function() {\%0A\
var node = popup._view.selectedNode;\%0A\
var urlsToOpen = PlacesUtils.getURLsForContainerNode(node);\%0A\
if (!urlsToOpen.length) return;\%0A\
var urls = [];\%0A\
for (var item of urlsToOpen) {\%0A\
urls.push(item.uri);\%0A\
};\%0A\
var uriList = PlacesUtils.toISupportsString(urls.join("|"));\%0A\
var args = Cc["@mozilla.org/supports-array;1"].createInstance(Ci.nsISupportsArray);\%0A\
args.AppendElement(uriList);\%0A\
Services.ww.openWindow(null, "chrome://browser/content/browser.xul", null, "chrome,dialog=no,all", args);\%0A\
};\%0A\
var handler = this.linkedPopupPopupshowihgHandler = function () {\%0A\
var place = (popup._view.selectedNodes.length == 1) && popup._view.selectedNode;\%0A\
menuitem.hidden = menuitem.disabled = !(place && PlacesUtils.nodeIsContainer(place));\%0A\
};\%0A\
handler(); popup.addEventListener("popupshowing", handler);\%0A\
]]>\%0A\
</constructor>\%0A\
<destructor>\%0A\
this.linkedPopup.removeEventListener("popupshowing", this.linkedPopupPopupshowihgHandler);\%0A\
</destructor>\%0A\
</implementation>\%0A\
</binding>\%0A\
</bindings>\
\
') !important;
}


/* КОД ДЛЯ ПУНКТА КОНТЕКСТНОГО МЕНЮ "Перевести выделенный фрагмент" */
/* Пока что он называется "Искать в первой поиск. системе" */
#contentAreaContextMenu spacer.arrowscrollbox-overflow-end-indicator {
    -moz-binding: url("data:text/xml;utf8,<bindings xmlns='http://www.mozilla.org/xbl' xmlns:xul='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul' xmlns:xbl='http://www.mozilla.org/xbl'><binding id='menu'><implementation><field name='contentAreaContextMenu'>document.getElementById('contentAreaContextMenu');</field><field name='searchselect'>document.getElementById('context-searchselect');</field><constructor><![CDATA[ var menuitem = this.contentAreaContextMenu.insertBefore(document.createElement('menuitem'), this.searchselect.nextSibling); menuitem.setAttribute(%22id%22, %22context-firstsearchselect%22); menuitem.setAttribute(%22oncommand%22, %22var Selection = null; if (gContextMenuContentData && gContextMenuContentData.isRemote) { Selection = gContextMenuContentData.selectionInfo.text; } else if (BrowserUtils.getSelectionDetails) { Selection = BrowserUtils.getSelectionDetails(window).text; } else { Selection = getBrowserSelection(); } var inBackground = Services.prefs.getBoolPref('browser.search.context.loadInBackground'); openLinkIn('https://translate.yandex.ru/?text=' + Selection, 'tab', { inBackground: inBackground, relatedToCurrent: true })%22); menuitem.setAttribute(%22label%22, %22Перевести выделенное Яндекс.Переводчик...%22); ]]></constructor></implementation></binding></bindings>#menu") !important;
}

#contentAreaContextMenu #context-searchselect[hidden="true"] ~ #context-firstsearchselect {
    display: none !important;
}
#urlbar:not(:-moz-lwtheme)[focused],
.searchbar-textbox:not(:-moz-lwtheme)[focused] {
    border-color: Highlight !important;
}


Ну, и напоследок: где в новых версиях папка chrome в \profile.default\?

Во первых, это не css, хотя "это" и могло работать из userChrome.css, раньше, но раньше и водка по 4.42 была, а сейчас нет.
Во вторых, если вы ищите решение для [firefox]60, то это не "последние версии", но там возможно этот код заработает, так как биндинги вырезали в 71 или 72 версии.
В третьих, даже если бы это был css, то с большой долей вероятности код от 52 не подошел бы к "последним версиям".
   
Текущий профиль смотрится в about:profiles.