появились однотипные ошибки на 69
Ого, вижу. Получается это и туда засунули что ли.
chrome:// адреса должны работать, destruct() здесь, наверно, не нужен,
оно, вроде, само рассасывается.
var url = "data:application/vnd.mozilla.xul+xml;text/plain," + encodeURIComponent(intf(drives, count)); if (parseInt(Services.appinfo.platformVersion) >= 69 && Services.appinfo.browserTabsRemoteAutostart) { var chromeURL = `chrome://custombuttons/content/cbdialog${Date.now()}.xul`; Cc["@mozilla.org/addons/addon-manager-startup;1"].getService(Ci.amIAddonManagerStartup).registerChrome( Services.io.newFileURI(Services.dirsvc.get("ProfD", Ci.nsIFile)), [["override", chromeURL, url]] ); url = chromeURL; }
//var load = async url => { var e10sFox69 = Services.appinfo.browserTabsRemoteAutostart && parseInt(Services.appinfo.platformVersion) >= 69; var load = async url => { if (e10sFox69) { config.uri = url; config.extension.remote = E10SUtils.getRemoteTypeForURI(url, true) != E10SUtils.NOT_REMOTE; }
Stkvsky
Хорошо, попробую
((hide, btns) => addEventListener("command", e => { if (e.target.id != "editBookmarkPanelRemoveButton" || StarUI._isNewBookmark) return; e.stopPropagation(); var [guid] = StarUI._itemGuids; StarUI._removeBookmarksOnPopupHidden = true; PlacesUtils.bookmarks.fetch(guid).then(res => { PlacesUtils.bookmarks.fetch({ parentGuid: res.parentGuid, index: res.index + 1 }).then(next => { hide(); next && openTrustedLinkIn(next.url.href, "current"); }, hide); }, hide); }, true, btns || 1))( () => StarUI.panel.hidePopup(), document.getElementById("editBookmarkPanelBottomButtons") );
многопроцессорная кнопка текст не выделяет
Там, где var cnt, в строку стиля можно добавить
-moz-user-focus:normal;-moz-user-select:text;
Отсутствует
Dumby
От теперь лепо, хвала! Перевод
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041F%u0435%u0440%u0435%u0432%u043E%u0434%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADKElEQVR42p2TX2hTdxTHPzfJTW6T3qQmapvWabUbog+udp3kYeLQ4f6wiZQNtjlXHyZaBYe6TekYVGRQYexFscOtuD7UdWxzMtAXEbZStKIbDsaUCbVj9o8mTW+aNrlJbu5vJ8Ex2OMO/Lj87jnne873nO9PSyTV3tkAfYi5NhQ1MB1Ijc3ijN+D7CQh28YK+GHDMyxpjlJTkmAdQi5dWvOsUrYkGB5QC5Kcg/aFBxxqqycmcY38a/1yTqYgMw8ByfFKjtZ4V6myCeW8IApyfOw2155fw1DG4dOJJK1r45x5BPDUpZuMr2uXSuAvgBMQgOitjLJNn7iDSJP0rIJ35dt19TeGoi0Es1MMP72KFvm3+88phuYM3HCd3ObQizpa/cW7Kh020E0Tz1yOUxvjdIr7o6t/cLpkEJqZp7s5zN62ZewfnWLQ9VIIBqodBdI5tIbBG8oKhSAaJZDN8tpSP5+3L8eVgLbeAdKal7NH3mKL3FcOXCfV1ITjc7FLFrWZIlpt/4+qEA7hLRrCwk/RusOXu7ax8xHvGTkVgi/89As/T8ia9EUyghKOWSaYyqNx8oIiuEgcshetsooceibJinvTfNH1DpseD3LHSZE4eprs6k24NQaevI1fF8q5FJqv9xvlmFLdkKZlhb77E8TdIlFD54OOl3mzdXm1k+sP0jzbdwF7cRhsj8ysAWYnpYPeQfXPnn3JJG8/sZT+PW8gkuDbkWEiRh3b29dV/edujNE5dB4nHJSCUrQsTdP9mUKrCKHA5piHK+918quVp/VoD9W9uhGejNRx6+N9VZAmoTJZmhbK4vR7BGDPCQEQ/qU8R15aT2/Hi/R8PcyxyyMyVBmaXwIfPiTVf5yYHiF28ARpOyuqk3nJ4DV2HFc4SamUZ3vrGr7vPlitFNraQc4SzZZt6ptWMv3DAOdGrrGj7yvR+2KYr5A0BeCVAwqvBQuyMG+MTzp3cvj15/ivfXfzNq++/yFEIlD7GFjZ6uPRaE4oGuNQI68jIINJu0QbTFoadIJlL7lSgb8sxbSVEb8geUUVtkh55r50MY5Wec6jibV9/A9LjP7e9TdFQScjW9P1XAAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%20%20%0Avar%20lc%20%3D%20navigator.lastClick%20%3D%20%7B%7D%3B%0AaddEventListener%28%22mouseup%22%2C%20e%20%3D%3E%20%7B%0A%20%20%20%20if%20%28e.button%29%20return%3B%0A%20%20%20%20lc.X%20%3D%20e.screenX%20-%20mozInnerScreenX%3B%0A%20%20%20%20lc.Y%20%3D%20e.screenY%20-%20mozInnerScreenY%3B%0A%7D%2C%20false%2C%20gBrowser.tabpanels%20%7C%7C%201%29%3B%0A%0Avar%20createWindow%20%3D%20function%28text%2C%20status%2C%20title%2C%20id%2C%20pos%2C%20size%29%7B%0Avar%20win%20%3D%20window%2C%20doc%20%3D%20win.document%2C%20wId%20%3D%20%27ujs_window%27+%28id%20%7C%7C%20%27%27%29%2C%20w%20%3D%20doc.getElementById%28wId%29%3B%0A%20%20%20%20var%20keyDown%20%3D%20function%28e%29%7Bif%28%21e.shiftKey%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.altKey%20%26%26%20e.keyCode%20%3D%3D%2027%29doc.getElementById%28wId%29.closeWin%28%29%7D%3B%0A%20%20%20%20if%28w%29w.closeWin%28%29%3B%0A%20%20%20%20w%20%3D%20doc.createElementNS%28xhtmlns%2C%20%27div%27%29%3B%0A%20%20%20%20%20w.setAttribute%28%27style%27%2C%20%27position%3Afixed%3Bdisplay%3Ablock%3Bvisibility%3Ahidden%3Bleft%3A0%3Btop%3A0%3Bwidth%3Aauto%3Bheight%3Aauto%3Bborder%3A1px%20solid%20gray%3Bpadding%3A2px%3Bmargin%3A0%3Bz-index%3A99999%3Boverflow%3Ahidden%3Bcursor%3Amove%3B%27+%28typeof%20w.style.borderRadius%20%3D%3D%3D%20%27string%27%20%3F%20%27background-color%3A%23eaeaea%3Bpadding-top%3A0px%3Bborder-radius%3A4px%3Bbox-shadow%3A0%200%2015px%20rgba%280%2C0%2C0%2C.4%29%3B%27%20%3A%20%27background%3A-o-skin%28%22Window%20Skin%22%29%3B%27%29%29%3B%0A%20%20%20%20w.id%20%3D%20wId%3B%0A%20%20%20%20w.closeWin%20%3D%20function%28%29%7B%0A%20%20%20%20%20%20%20%20doc.removeEventListener%28%27keydown%27%2C%20keyDown%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.parentNode.removeChild%28this%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20w.addEle%20%3D%20function%28str%2C%20style%29%7B%0A%20%20%20%20%20%20%20%20var%20ele%20%3D%20doc.createElementNS%28xhtmlns%2C%20%27div%27%29%3B%0A%20%20%20%20%20%20%20%20ele.setAttribute%28%27style%27%2C%20style%29%3B%0A%20%20%20%20%20%20%20%20if%28str%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20ele.innerHTML%20%3D%20str%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%28var%20el%2C%20all%20%3D%20ele.getElementsByTagName%28%27*%27%29%2C%20i%20%3D%20all.length%3B%20i--%3B%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20el%20%3D%20all%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%28/%5E%28script%7Cframe%7Ciframe%7Capplet%7Cembed%7Cobject%29%24/i.test%28el.nodeName%29%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20el.parentNode.removeChild%28el%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%28var%20att%20%3D%20el.attributes%2C%20j%20%3D%20att.length%3B%20j--%3B%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%28/%5Eon%5Ba-z%5D+%24/i.test%28att%5Bj%5D.name%29%29att%5Bj%5D.value%20%3D%20%27%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20return%20this.appendChild%28ele%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20var%20img%20%3D%20doc.createElement%28%27div%27%29%3B%0A%20%20%20%20img.setAttribute%28%27style%27%2C%20%27display%3Ablock%3Bfloat%3Aright%3Bwidth%3A16px%3Bheight%3A16px%3Bpadding%3A0%3Bmargin-top%3A2px%3Bmargin-right%3A1px%3Bborder%3Anone%3Bcursor%3Apointer%3Bbackground-image%3Aurl%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACQUlEQVR4Xm2SPUhbURTHfzfNJ4nU0Axx7CJCN2kQtIgVCtq6OdQuBUftWIQqFNsKDo6iHTqIqN3a0kklUKTS2AZrcOjioFtRjFWUfH+803cS9GHwB4dzcu75/+8L9xgaSEDbLXhaASzAyXAMn5/DHxwwjeJgKLRxd3Q0atxuLhGgWqmQmp9PJ7LZJ5Ow3WhQFweDG20LC1FfRwc3kUsm+T48fPIzl3s8VTdxxLt+/2FhdlZkc1MkmdR8Pba2ajlrz3z1+9OvIOaIfb7DwsSEyNKSyM6OSLksEo/rbw2ttadntV7Gnv3k86VfqskvmDzv7hZ580Zkelrk4kJqFIsii4satVrRs+rYmBQHBuRvS4u8g/fuCmDOz+HgAIWpKRgfh3AYhoZQ8Hqxjo4o9PdT3d1FcQEl8KoBnJ7C/j6KZkZGYG4OIhEUFed7erD29q69jGrd1qVBqcQVKgwEuMSEQhjtXRk4JvW/kM1i2WGMga4uzMoKBIOIfbNiolEC6+uU+/qQRALFA1QBlwVYxmBcLmhuxqytQSgEKu7t1dBavwKvbeINh/Has2IMqnXpem4bky6qWLdvZgaOj2FwEHNyoqG19vRMZ8jZs1+NOfsNcZS3EFvzeNL51laRe/dEYrFadsLpZeyZDx7P6QN4Btwx1OE1xO4HAquP2tsjAZ+Pm8gWi3xMpc6W8/kXPyAO/DM4oOsZa2pafdjZGXF7PAgOpXKZL4nE2XImcyUGMDSg63kbhgvgtYCq8+akIL4J3y7Fyn+DokZOnLlMyQAAAABJRU5ErkJggg%3D%3D%22%29%3Bbackground%3A-o-skin%28%22Caption%20Close%20Button%20Skin%22%29%3B%27%29%3B%0A%20%20%20%20img.title%20%3D%20%28win.navigator.language.indexOf%28%27ru%27%29%20%3D%3D%200%29%20%3F%20%27%5Cu0417%5Cu0430%5Cu043A%5Cu0440%5Cu044B%5Cu0442%5Cu044C%27%20%3A%20%27Close%27%3B%0A%20%20%20%20img.addEventListener%28%27click%27%2C%20function%28%29%7Bthis.parentNode.closeWin%28%29%7D%2C%20false%29%3B%0A%20%20%20%20w.appendChild%28img%29%3B%0A%20%20%20%20var%20title%20%3D%20w.addEle%28title%2C%20%27display%3Atable%3Bcolor%3A%23000%3Bfont%3A17px%20Times%20New%20Roman%3Bwidth%3Aauto%3Bheight%3Aauto%3Bpadding%3A0%3Bmargin%3A0%202px%3Bcursor%3Atext%3B%27%29%3B%0A%20%20%20%20%20%20%20%20title.onclick%20%3D%20e%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20var%20url%20%3D%20e.target.href%3B%0A%20%20%20%20%20%20%20%20//%20%u0417%u0434%u0435%u0441%u044C%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0435%u043C%20url%20%u043A%u0430%u043A%20%u0445%u043E%u0442%u0438%u043C.%0A%20%20%20%20%20%20%20%20var%20ctabpos%20%3D%20gBrowser.selectedTab._tPos%20+1%3B%0A%20%20%20%20%20%20%20%20gBrowser.moveTabTo%28gBrowser.selectedTab%20%3D%20gBrowser.addWebTab%28url%29%2C%20ctabpos%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20var%20cnt%20%3D%20w.addEle%28text%2C%20%27display%3Ablock%3Bborder%3A1px%20solid%20%23aaa%3Bpadding-bottom%3A3px%3Bpadding-left%3A3px%3Bbackground-color%3A%23fafcfe%3Bcolor%3A%23000%3Bfont%3A17px%20Times%20New%20Roman%3Bwidth%3A310px%3Bheight%3A160px%3Boverflow%3Aauto%3Bcursor%3Atext%3B-moz-user-focus%3Anormal%3B-moz-user-select%3Atext%3B%27%29%3B%0A%20%20%20%20w.addEle%28status%2C%20%27display%3Atable%3Bfont%3A12px%20Times%20New%20Roman%3Bfont-weight%3Abold%3Bcolor%3Ablue%3Bwidth%3Aauto%3Bheight%3Aauto%3Bpadding-top%3A2px%3Bmargin%3A0%203px%3Bcursor%3Apointer%3B%27%29%3B%0A%20%20%20%20w.addEventListener%28%27mousedown%27%2C%20function%28e%29%7B%0A%20%20%20%20%20%20%20%20if%28e.target%20%3D%3D%20w%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20grabX%20%3D%20e.clientX%2C%20grabY%20%3D%20e.clientY%2C%20origX%20%3D%20parseInt%28w.style.left%29%2C%20origY%20%3D%20parseInt%28w.style.top%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20mouseMove%20%3D%20function%28ev%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20w.style.left%20%3D%20origX+ev.clientX-grabX+%27px%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20w.style.top%20%3D%20origY+ev.clientY-grabY+%27px%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20doc.addEventListener%28%27mousemove%27%2C%20mouseMove%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20doc.addEventListener%28%27mouseup%27%2C%20function%28%29%7Bdoc.removeEventListener%28%27mousemove%27%2C%20mouseMove%2C%20false%29%7D%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%2C%20false%29%3B%0A%20%20%20%20doc.documentElement.appendChild%28w%29%3B%0A%20%20%0A%20%20%20%20if%28size%29%7B%0A%20%20%20%20%20%20%20%20cnt.style.height%20%3D%20size.height%3B%0A%20%20%20%20%20%20%20%20cnt.style.width%20%3D%20size.width%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%7B%0A%20%20%20%20%20%20%20%20for%28var%20i%20%3D%203%3B%20i%20%3C%2010%3B%20i++%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%28cnt.scrollHeight%20%3E%20cnt.offsetHeight%20%7C%7C%20cnt.scrollWidth%20%3E%20cnt.offsetWidth%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cnt.style.height%20%3D%2080*i+%27px%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cnt.style.width%20%3D%20160*i+%27px%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20else%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20var%20docEle%20%3D%20%28doc.compatMode%20%3D%3D%20%27CSS1Compat%27%20%26%26%20win.postMessage%29%20%3F%20doc.documentElement%20%3A%20doc.body%3B%0A%20%20%20%20var%20mX%20%3D%20docEle.clientWidth-w.offsetWidth%2C%20mY%20%3D%20docEle.clientHeight-w.offsetHeight%3B%0A%20%20%20%20if%28mX%20%3C%200%29%7Bcnt.style.width%20%3D%20parseInt%28cnt.style.width%29+mX+%27px%27%3B%20mX%20%3D%200%7D%3B%0A%20%20%20%20if%28mY%20%3C%200%29%7Bcnt.style.height%20%3D%20parseInt%28cnt.style.height%29+mY+%27px%27%3B%20mY%20%3D0%7D%3B%0A%20%20%20%20var%20hW%20%3D%20parseInt%28w.offsetWidth/2%29%3B%0A%20%20%20%20w.style.left%20%3D%20%28pos%20%26%26%20pos.X%20%3C%20mX+hW%20%3F%20%28pos.X%20%3E%20hW%20%3F%20pos.X-hW%20%3A%200%29%20%3A%20mX%29+%27px%27%3B%0A%20%20%20%20w.style.top%20%3D%20%28pos%20%26%26%20pos.Y+10%20%3C%20mY%20%3F%20pos.Y+10%20%3A%20mY%29+%27px%27%3B%0A%20%20%20%20w.style.visibility%20%3D%20%27visible%27%3B%0A%20%20%20%20doc.addEventListener%28%27keydown%27%2C%20keyDown%2C%20false%29%3B%0A%20%20%20%20return%20w%3B%0A%7D%3B%0A%0Avar%20getHash%20%3D%20function%20%28txt%29%20%7B%0A%20%20%20%20TKK%3Deval%28%27%28%28function%28%29%7Bvar%20a%5Cx3d817046147%3Bvar%20b%5Cx3d-335196159%3Breturn%20410049+%5Cx27.%5Cx27+%28a+b%29%7D%29%28%29%29%27%29%3B%0A%20%20%20%20function%20sM%28a%29%20%7B%0A%20%20%20%20%20%20%20%20var%20b%3B%0A%20%20%20%20%20%20%20%20if%20%28null%20%21%3D%3D%20yr%29%0A%20%20%20%20%20%20%20%20%20%20%20%20b%20%3D%20yr%3B%0A%20%20%20%20%20%20%20%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20b%20%3D%20wr%28String.fromCharCode%2884%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20c%20%3D%20wr%28String.fromCharCode%2875%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20b%20%3D%20%5Bb%28%29%2C%20b%28%29%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20b%5B1%5D%20%3D%20c%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20b%20%3D%20%28yr%20%3D%20window%5Bb.join%28c%28%29%29%5D%20%7C%7C%20%22%22%29%20%7C%7C%20%22%22%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20var%20d%20%3D%20wr%28String.fromCharCode%28116%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%2C%20c%20%3D%20wr%28String.fromCharCode%28107%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%2C%20d%20%3D%20%5Bd%28%29%2C%20d%28%29%5D%3B%0A%20%20%20%20%20%20%20%20d%5B1%5D%20%3D%20c%28%29%3B%0A%20%20%20%20%20%20%20%20c%20%3D%20%22%26%22%20+%20d.join%28%22%22%29%20+%20%22%3D%22%3B%0A%20%20%20%20%20%20%20%20d%20%3D%20b.split%28%22.%22%29%3B%0A%20%20%20%20%20%20%20%20b%20%3D%20Number%28d%5B0%5D%29%20%7C%7C%200%3B%0A%20%20%20%20%20%20%20%20for%20%28var%20e%20%3D%20%5B%5D%2C%20f%20%3D%200%2C%20g%20%3D%200%3B%20g%20%3C%20a.length%3B%20g++%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20l%20%3D%20a.charCodeAt%28g%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20128%20%3E%20l%20%3F%20e%5Bf++%5D%20%3D%20l%20%3A%20%282048%20%3E%20l%20%3F%20e%5Bf++%5D%20%3D%20l%20%3E%3E%206%20%7C%20192%20%3A%20%2855296%20%3D%3D%20%28l%20%26%2064512%29%20%26%26%20g%20+%201%20%3C%20a.length%20%26%26%2056320%20%3D%3D%20%28a.charCodeAt%28g%20+%201%29%20%26%2064512%29%20%3F%20%28l%20%3D%2065536%20+%20%28%28l%20%26%201023%29%20%3C%3C%2010%29%20+%20%28a.charCodeAt%28++g%29%20%26%201023%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%5Bf++%5D%20%3D%20l%20%3E%3E%2018%20%7C%20240%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%5Bf++%5D%20%3D%20l%20%3E%3E%2012%20%26%2063%20%7C%20128%29%20%3A%20e%5Bf++%5D%20%3D%20l%20%3E%3E%2012%20%7C%20224%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%5Bf++%5D%20%3D%20l%20%3E%3E%206%20%26%2063%20%7C%20128%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%5Bf++%5D%20%3D%20l%20%26%2063%20%7C%20128%29%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20a%20%3D%20b%3B%0A%20%20%20%20%20%20%20%20for%20%28f%20%3D%200%3B%20f%20%3C%20e.length%3B%20f++%29%0A%20%20%20%20%20%20%20%20%20%20%20%20a%20+%3D%20e%5Bf%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20a%20%3D%20xr%28a%2C%20%22+-a%5E+6%22%29%3B%0A%20%20%20%20%20%20%20%20a%20%3D%20xr%28a%2C%20%22+-3%5E+b+-f%22%29%3B%0A%20%20%20%20%20%20%20%20a%20%5E%3D%20Number%28d%5B1%5D%29%20%7C%7C%200%3B%0A%20%20%20%20%20%20%20%200%20%3E%20a%20%26%26%20%28a%20%3D%20%28a%20%26%202147483647%29%20+%202147483648%29%3B%0A%20%20%20%20%20%20%20%20a%20%25%3D%201E6%3B%0A%20%20%20%20%20%20%20%20return%20c%20+%20%28a.toString%28%29%20+%20%22.%22%20+%20%28a%20%5E%20b%29%29%0A%20%20%20%20%7D%0A%0A%20%20%20%20var%20yr%20%3D%20null%3B%0A%20%20%20%20var%20wr%20%3D%20function%28a%29%20%7B%0A%20%20%20%20%20%20%20%20return%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20a%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2C%20xr%20%3D%20function%28a%2C%20b%29%20%7B%0A%20%20%20%20%20%20%20%20for%20%28var%20c%20%3D%200%3B%20c%20%3C%20b.length%20-%202%3B%20c%20+%3D%203%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20d%20%3D%20b.charAt%28c%20+%202%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2C%20d%20%3D%20%22a%22%20%3C%3D%20d%20%3F%20d.charCodeAt%280%29%20-%2087%20%3A%20Number%28d%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2C%20d%20%3D%20%22+%22%20%3D%3D%20b.charAt%28c%20+%201%29%20%3F%20a%20%3E%3E%3E%20d%20%3A%20a%20%3C%3C%20d%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20a%20%3D%20%22+%22%20%3D%3D%20b.charAt%28c%29%20%3F%20a%20+%20d%20%26%204294967295%20%3A%20a%20%5E%20d%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20a%0A%20%20%20%20%7D%3B%20%0A%0A%20%20%20%20return%20sM%28txt%29%3B%0A%7D%3B%20%0A%20%0A%20%20%0A%20%0Avar%20ujs_google_translate%20%3D%20function%20%28dir%29%7B%0A%20%20%20%20var%20lng%20%3D%20window.navigator.language.slice%280%2C%202%29%2C%20txt%20%3D%20gContextMenuContentData.selectionInfo.fullText%2C%20l%20%3D%20dir.split%28%27%7C%27%29%3B%0A%20%20%20%20var%20encTxt%20%3D%20encodeURIComponent%28txt%29%3B%0A%20%20%20%20var%20winWait%20%3D%20function%28lng%29%7BcreateWindow%28%27%27%2C%20%28lng%20%3D%3D%20%27ru%27%20%3F%20%27%5Cu041F%5Cu0435%5Cu0440%5Cu0435%5Cu0432%5Cu043E%5Cu0434%5Cu0438%5Cu043C%27%20%3A%20%27Translating%27%29+%27%5Cu2026%27%2C%20%27Google%20Translate%27%2C%20%27_gt%27%2C%20window.navigator.lastClick%29%7D%3B%0A%20%20%20%20%0A%20%20%20%20if%20%28txt%29%20%7B%0A%20%20%20%0A%20%20%20%20%20%20%20%20winWait%28lng%29%3B%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20var%20xhr%20%3D%20new%20XMLHttpRequest%28%29%3B%0A%20%20%20%20%20%20%20%20var%20url%20%3D%20%27https%3A//translate.google.com/translate_a/single%3Fclient%3Dt%26sl%3D%27%20+%20l%5B0%5D%20+%20%27%26tl%3D%27%20+%20l%5B1%5D%20+%20%27%26hl%3D%27%20+%20lng%20+%20%27%26eotf%3D0%26dt%3Dat%26dt%3Dbd%26dt%3Dex%26dt%3Dld%26dt%3Dmd%26dt%3Dqca%26dt%3Drw%26dt%3Drm%26dt%3Dss%26dt%3Dt%27%20+%20getHash%28txt%29%3B%0A%20%20%20%20%20%20%20%20var%20urle%20%3D%20%22http%3A//translate.google.com/translate_t%3Ftext%3D%22+encTxt+%22%26sl%3D%27%20+%20l%5B0%5D%20+%20%27%26tl%3D%27%20+%20l%5B1%5D%20+%20%27%26hl%3D%27%20+%20lng%20+%20%27%26eotf%3D0%26ujs%3Dgtt%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20xhr.open%28%27POST%27%2C%20url%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20xhr.setRequestHeader%28%27Content-Type%27%2C%20%27application/x-www-form-urlencoded%3Bcharset%3Dutf-8%27%29%3B%0A%20%20%20%20%20%20%20%20xhr.onreadystatechange%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20try%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28xhr.readyState%20%3D%3D%204%20%26%26%20xhr.status%20%3D%3D%20200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20result%20%3D%20%27%27%2C%20status%20%3D%20%27%27%2C%20tmp%20%3D%20JSON.parse%28xhr.responseText.replace%28/%5C%5B%28%3F%3D%2C%29/g%2C%20%27%5B0%27%29.replace%28/%2C%28%3F%3D%2C%7C%5C%5D%29/g%2C%20%27%2C0%27%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%28var%20i%20%3D%200%2C%20n%3B%20n%20%3D%20tmp%5B0%5D%5Bi%5D%3B%20i++%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%28n%5B0%5D%29result%20+%3D%20n%5B0%5D.toString%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%3D%20%27%3Cspan%20style%3D%22background-color%3Ainherit%3Bcolor%3Ainherit%3Bfont-size%3Ainherit%3Bfont-family%3ATimes%2Cserif%3B%22%3E%27%20+%20result%20+%20%27%3C/span%3E%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20status%20%3D%20tmp%5B8%5D%5B0%5D%5B0%5D.toUpperCase%28%29%20+%20%27%20-%5Cu203A%20%27%20+%20l%5B1%5D.toUpperCase%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createWindow%28result%2C%20status%2C%20%27%3Ca%20href%3D%22%27+urle.replace%28/%26/g%2C%27%26amp%3B%27%29+%27%22%20%20style%3D%22display%3Ainline%3Bpadding%3A0%3Bmargin%3A0%3Btext-decoration%3Anone%3Bborder%3Anone%3Bcolor%3Ablue%3Bfont%3A17px%20Times%20New%20Roman%3B%22%3EGoogle%20Translate%3C/a%3E%27%2C%20%27_gt%27%2C%20window.navigator.lastClick%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20catch%20%28x%29%7BLOG%28x%29%7D%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20xhr.send%28%27q%3D%27%20+%20encodeURIComponent%28txt%29%29%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20var%20urlt%20%3D%20gBrowser.currentURI.spec%3B%20%20%0A%20%20%20%20%20%20%20%20var%20url%20%3D%20%22http%3A//translate.google.com/translate%3Fu%3D%22+encodeURIComponent%28urlt%29+%22%26hl%3D%22+lng+%22%26langpair%3D%22+dir+%22%26tbb%3D1%22%3B%0A%20%20%20%20%20%20%20%20var%20ctabpos%20%3D%20gBrowser.selectedTab._tPos%20+1%3B%0A%20%20%20%20%20%20%20%20gBrowser.moveTabTo%28gBrowser.selectedTab%20%3D%20gBrowser.addWebTab%28url%29%2C%20ctabpos%29%3B%0A%20%20%20%20%7D%3B%0A%7D%3B%0A%0A%0A%0A%0Avar%20contextMenu%20%3D%20document.getElementById%28%22contentAreaContextMenu%22%29%3B%0Avar%20nextEleMenu%20%3D%20document.getElementById%28%22context-inspect%22%29%3B%0A%0Avar%20menuId%20%3D%20%22context-ext-google-translate%22%3B%0Avar%20menuItem%20%3D%20document.getElementById%28menuId%29%3B%0Aif%20%28menuItem%29%20%7B%0A%20%20%20%20contextMenu.removeChild%28menuItem.nextElementSibling%29%3B%0A%20%20%20%20contextMenu.removeChild%28menuItem.nextElementSibling%29%3B%0A%20%20%20%20contextMenu.removeChild%28menuItem%29%3B%0A%7D%3B%0A%0AmenuItem%20%3D%20document.createXULElement%28%22menuitem%22%29%3B%0AmenuItem.setAttribute%28%22id%22%2C%20menuId%29%3B%0AmenuItem.setAttribute%28%22label%22%2C%20%22%u041F%u0435%u0440%u0435%u0432%u0435%u0441%u0442%u0438%20%u043D%u0430%20%u0440%u0443%u0441%u0441%u043A%u0438%u0439%22%29%3B%0AmenuItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0AmenuItem.setAttribute%28%22image%22%2C%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABBUlEQVR4Ac2RMU4DMRREB2MqihQpAkUaqnAduuQw4Sx03CGcJYIiDYqQ0lCsZ77535ZFcgAkRuPvV7zd/dLiz3N1PFb8hmRckrfELZrF9ONQ1B6Yz0MyM7S0O6zGkVprh/3+Kw/JzkHSpRpJKZkpr9fYbOx0cjVsCbWG31oHBM9mtt0q73ZcrdLhAMlYQKkUI22aqsNo8HKZAMQhvVaKSHWj2Q2aPU3mJQFY7nuHyvYFduP83WF3AJRfcPNYnr/Lp1G1uK4m9sno1LaUbnX/htf8BNzoneUD5NhjvLCMhURQSQ93QCZwXYjFwg3I0NZKrvoknQPMIHkt/jRAQKMeG2yX89/mB4EJbKbZxIhFAAAAAElFTkSuQmCC%22%29%3B%0AmenuItem.addEventListener%28%22command%22%2C%20function%28%29%7Bujs_google_translate%28%27auto%7Cru%27%29%7D%2C%20false%29%3B%0AcontextMenu.insertBefore%28menuItem%2C%20nextEleMenu%29%3B%0A%0AmenuItem%20%3D%20document.createXULElement%28%22menuitem%22%29%3B%0AmenuItem.setAttribute%28%22label%22%2C%20%22%u041F%u0435%u0440%u0435%u0432%u0435%u0441%u0442%u0438%20%u043D%u0430%20%u0430%u043D%u0433%u043B%u0438%u0439%u0441%u043A%u0438%u0439%22%29%3B%0AmenuItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0AmenuItem.setAttribute%28%22image%22%2C%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAAB5UlEQVR4AWOgPZg0c9+Oq2+qpx9LaQaiw4mNB27efbs2uXFNQh2Q4Zm9zSNth23MhqjGnXMC86vnHmUS4udxv7OvOd2yPE7PTlfCTk9GVVEoyJA7WI8dyPA0k3U1l+jJMV7CeThpTZeoKDdDUsvBPSff/V+6/P/Bvf///2+bdvU/EKRm/k9IBNIlfZe+LFrzvbsbyJ636pKkyQyQhoUb7tZNvPpw3/0/TfX/ISAm5n94BIiRm/n/xYsLd946ei4vajoiqDuRAejQf//+o4PQ0P9+fmhiQGVnrr1kXJNYG2zEzXDxDsPv3wy/fkFJoOTPn39+/fr/69e/37//AUX+/mXRkO458wWHDba2f8wswCyQ3N+/f//8/fP7z5+TV18w2Mdt6plzPiptx5Wr7/+/ffMzOR6kysjkt74hWMPfp06O+2dulZCeFZKwnkE4m8E8bN3i9aCQ+dxY96GrK6bkGJD9R1v3l6Y20NVW9kt+/v//ZdbcFwkxTVPPMQimM8XEqkb7a/zoqLxkH9v4zVyI5+///wyMmtKMmhJAnbLqQjHxaw5r2orOmZN5uj470Zahat6BKS7JzpmLBHXm8GhM5lCdcP7ai1ZpixZxk9NXXjKIFzOIFjAI54oY1vXuue5qmscw+AAAW0tKxtPoicEAAAAASUVORK5CYII%3D%22%29%3B%0AmenuItem.addEventListener%28%22command%22%2C%20function%28%29%7Bujs_google_translate%28%27auto%7Cen%27%29%7D%2C%20false%29%3B%0AcontextMenu.insertBefore%28menuItem%2C%20nextEleMenu%29%3B%0A%0AcontextMenu.insertBefore%28document.createXULElement%28%22menuseparator%22%29%2C%20nextEleMenu%29%3B%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%20%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отредактировано solombala (16-09-2019 20:22:53)
Отсутствует
Dumby помоги разобраться с еще одной для многопроцессорного-
var defaultURL = gBrowser.currentURI.spec; загружает что попало
/*Initialization Code*/ // Добавить новый пункт "Открыть в нижней панели" в контекстное меню вкладки .............................................................................................. (function () { gCBNote = this; // global obj var label = "Сайт"; var icon ="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMjHxIGmVAAABKUlEQVQ4T6WS24qDMBRF/f9fHCi1ijHkQi7kRqJ7jpYZYSxMi8J6CezlyT7p6MNFXh5+wsvDT+hQ2opcn6TyJG7kJ4HwcYXxDcoWCJXhXD4E67r+y7IsKKUipYwQElpO7wtaW5BzRYwF3idYG5FCfE9w/PknHKC1R3D+EEi6j3LlhLQZs04YRcBjdrhPFrdB46tXuI/qEFykg0vUbqi/SF8hqG1utgkyJhUxyogHD+hnjzvz0MoegtPdqbRaGhKVFjytzG4BB8EtZqYx0fh8kmfBsqyote2Nh1CosARjAqR04BSeJoNhUOh7iWkQZ0Gtx7q2h2JMhFJ+DzO2hfUevt0Ehp7/FSxEo/ELVnokNSYkWlWwDk4ZaKEhGY0+crCBQ7H5EFwCuAK6b7kpsLGbUcTpAAAAAElFTkSuQmCC"; var defaultURL = gBrowser.currentURI.spec; function $(aId) { return document.getElementById(aId); } this.togglePanel = function() { this.panel = !this.panel; $("SNote-splitter").hidden = !this.panel; $("SNote-panel").hidden = !this.panel; $("SNote-iframe").setAttribute("src", this.panel ? defaultURL : ""); } function makeXML(aXMLString) { return (new DOMParser).parseFromString(aXMLString, "application/xml") .documentElement; } function $xml(aNode, aId, aXML) { var node = $(aId); node && node.parentNode.removeChild(node); aNode && aNode.appendChild(makeXML(aXML)) } $xml($("appcontent"), "SNote-splitter", '<splitter xmlns="' + xulns + '" id="SNote-splitter"' + ' orient="vertical" hidden="true">' + '<grippy oncommand="this.parentNode.nextSibling.collapsed =' + ' !this.parentNode.nextSibling.collapsed;"/></splitter>'); $xml($("appcontent"), "SNote-panel", '<vbox xmlns="' + xulns + '" id="SNote-panel"' + ' height="300" hidden="true">' + '<toolbox><toolbar align="center">' + '<label value=" " flex="1" crop="end"/>' + '<toolbarbutton class="tabs-closebutton"' + ' image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACt0lEQVQ4jaWSzUtUYRTGn/fcGZ25H+m9Iyne8fpFq4lGCsFFIW21NiKKuHIn4qpazDraabnMTVEh+Af0B0QIIohBowhlkM1MMTre+VLngzv3PW1SKWvVWR0eOL/zcM4jmBn/U4G/iTuzsyK7unoLUl4HABDtdExNbV1fXr60Tfzp4J1h3Dd1/ak1OHhN7+kBiHCaTsPd2NgrlMsP7x4fv/0nYE3XH9ix2GLbzIwQmvYbmCsVHL16xd+3tx/dOTl5dqbTWfPeMIavOs6COT0tmBmyWAS1toJaWyGLRbCUMKemxFXHWXhvGMOXACrw2BwdJYUITX190MbG4O/twf/yBdrYGJr6+6EQwbx3j1QhHv8GWDfNNjUavR3u6ACyWQRjMQRsG+rkJNSJCQRsG8FYDDKbRbi9Harj3F43zbYLB41Gr2bbRIUCFACnS0vwMhkEbBsB24aXyaCcSEDJZiFyOWidnYRGo/f8jQpQp9NTiFwOACCJACEuDsgMeXAAuC7YMECeBwWonwOaLOtT/evXMhTlSs00oS8vI2jbqGcyADOau7pgvHiB8vg4tMND1F233GRZn87pzIwtXX9eiEb5uLubC2/ecC2V4qOhIT4aGuJqKsX516/52HG4EI3ylq4/P5s7z8FHy2qXnvehOxTqDBGhFongiusCAMqWhVA+j5qU+Far/RDB4M2BfP7gUpCSLS03qr7/NiyEExEC6i+9AsBlRpU5FVaU+zdKpeSlHCSTSazOzW0XNW2gCjzZ9/3Pu77Pu77P+77/uQo8cTVt4OXMzM7a2tpFlBOJhFhZWWkulUphz/NUKWWYmUPM3GwCKgBRAKoA6kRUI6JKIBCo6rpeGRkZqQlmRjqdxuLiIm1ublIul6NKpaI0Gg3yfV8AABFxMBiUoVBIRiIRPx6Py/n5eRmPx/ETBvM/dPD/rBwAAAAASUVORK5CYII="' + ' oncommand="gCBNote.togglePanel();"/>' + '</toolbar></toolbox>' + '<iframe id="SNote-iframe" src="" flex="1"/>' + '</vbox>'); if ( document.getElementById("TabSNote") ) return; var tabContext = document.getElementById("tabContextMenu"); var menuItem = document.createXULElement("menuitem"); menuItem.setAttribute("id", "TabSNote"); menuItem.setAttribute("label", "Открыть в нижней панели"); menuItem.setAttribute("class", "menuitem-iconic"); menuItem.setAttribute("image", icon); menuItem.setAttribute("oncommand", "gCBNote.togglePanel();" ); tabContext.insertBefore( menuItem, tabContext.firstChild.nextSibling ); // как первый пункт })();
// Добавить нумерацию вкладок .......................................................................................................................... (function (x) { gBrowser.addEventListener("load", x, true); window.addEventListener("TabMove", x, false); window.addEventListener("TabClose", x, false); })(function () { setTimeout(function () { Array.map(gBrowser.visibleTabs || gBrowser.mTabs, function (tab, num) { tab.label = (num + 1) + " \u202D" + tab.label.match(/(?:^\d+ \u202D)?(.+)/)[1]; }) }, 5); });
Отредактировано Andrey_Krropotkin (16-09-2019 22:38:37)
Отсутствует
От теперь лепо, хвала! Перевод
текст выделяется и что контекстное меню для переведенного текста есть? У меня почему нет.
А вот так есть
/*Initialization Code*/ var lc = navigator.lastClick = {}; addEventListener("mouseup", e => { if (e.button) return; lc.X = e.screenX - mozInnerScreenX; lc.Y = e.screenY - mozInnerScreenY; }, false, gBrowser.tabpanels || 1); var createWindow = function(text, status, title, id, pos, size){ var win = window, doc = win.document, wId = 'ujs_window'+(id || ''), w = doc.getElementById(wId); var keyDown = function(e){if(!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == 27)doc.getElementById(wId).closeWin()}; if(w)w.closeWin(); w = doc.createElementNS(xhtmlns, 'div'); w.setAttribute('style', 'position:fixed;display:block;visibility:hidden;left:0;top:0;width:auto;height:auto;border:1px solid gray;padding:2px;margin:0;z-index:99999;overflow:hidden;cursor:move;'+(typeof w.style.borderRadius === 'string' ? 'background-color:#eaeaea;padding-top:0px;border-radius:4px;box-shadow:0 0 15px rgba(0,0,0,.4);' : 'background:-o-skin("Window Skin");')); w.id = wId; w.closeWin = function(){ doc.removeEventListener('keydown', keyDown, false); this.parentNode.removeChild(this); }; w.addEle = function(str, style){ var ele = doc.createElementNS(xhtmlns, 'div'); ele.setAttribute('style', style); if(str){ ele.innerHTML = str; for(var el, all = ele.getElementsByTagName('*'), i = all.length; i--;){ el = all[i]; if(/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)){ el.parentNode.removeChild(el); } else{ for(var att = el.attributes, j = att.length; j--;){ if(/^on[a-z]+$/i.test(att[j].name))att[j].value = ''; } } } }; return this.appendChild(ele); }; w.addEle1 = function(str, style){ var ele = doc.createElementNS(xhtmlns, 'textarea'); ele.setAttribute('style', style); if(str){ ele.innerHTML = str; for(var el, all = ele.getElementsByTagName('*'), i = all.length; i--;){ el = all[i]; if(/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)){ el.parentNode.removeChild(el); }else{ for(var att = el.attributes, j = att.length; j--;){ if(/^on[a-z]+$/i.test(att[j].name))att[j].value = ''; } } } }; return this.appendChild(ele); }; var img = doc.createElement('div'); img.setAttribute('style', 'display:block;float:right;width:16px;height:16px;padding:0;margin-top:2px;margin-right:1px;border:none;cursor:pointer;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACQUlEQVR4Xm2SPUhbURTHfzfNJ4nU0Axx7CJCN2kQtIgVCtq6OdQuBUftWIQqFNsKDo6iHTqIqN3a0kklUKTS2AZrcOjioFtRjFWUfH+803cS9GHwB4dzcu75/+8L9xgaSEDbLXhaASzAyXAMn5/DHxwwjeJgKLRxd3Q0atxuLhGgWqmQmp9PJ7LZJ5Ow3WhQFweDG20LC1FfRwc3kUsm+T48fPIzl3s8VTdxxLt+/2FhdlZkc1MkmdR8Pba2ajlrz3z1+9OvIOaIfb7DwsSEyNKSyM6OSLksEo/rbw2ttadntV7Gnv3k86VfqskvmDzv7hZ580Zkelrk4kJqFIsii4satVrRs+rYmBQHBuRvS4u8g/fuCmDOz+HgAIWpKRgfh3AYhoZQ8Hqxjo4o9PdT3d1FcQEl8KoBnJ7C/j6KZkZGYG4OIhEUFed7erD29q69jGrd1qVBqcQVKgwEuMSEQhjtXRk4JvW/kM1i2WGMga4uzMoKBIOIfbNiolEC6+uU+/qQRALFA1QBlwVYxmBcLmhuxqytQSgEKu7t1dBavwKvbeINh/Has2IMqnXpem4bky6qWLdvZgaOj2FwEHNyoqG19vRMZ8jZs1+NOfsNcZS3EFvzeNL51laRe/dEYrFadsLpZeyZDx7P6QN4Btwx1OE1xO4HAquP2tsjAZ+Pm8gWi3xMpc6W8/kXPyAO/DM4oOsZa2pafdjZGXF7PAgOpXKZL4nE2XImcyUGMDSg63kbhgvgtYCq8+akIL4J3y7Fyn+DokZOnLlMyQAAAABJRU5ErkJggg==");background:-o-skin("Caption Close Button Skin");'); img.title = (win.navigator.language.indexOf('ru') == 0) ? '\u0417\u0430\u043A\u0440\u044B\u0442\u044C' : 'Close'; img.addEventListener('click', function(){this.parentNode.closeWin()}, false); w.appendChild(img); var title = w.addEle(title, 'display:table;color:#000;font:17px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;'); title.onclick = e => { e.preventDefault(); var url = e.target.href; // Здесь открываем url как хотим. var ctabpos = gBrowser.selectedTab._tPos +1; gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos); doc.getElementById(wId).closeWin(); } var cnt = w.addEle1(text, 'display:block;border:1px solid #aaa;padding-bottom:3px;padding-left:3px;background-color:#fafcfe;color:#000;font:17px Times New Roman;width:310px;height:160px;overflow:auto;cursor:text;-moz-user-focus:normal;-moz-user-select:text;'); cnt.contentEditable="true"; cnt.context="contentAreaContextMenu"; w.addEle(status, 'display:table;font:12px Times New Roman;font-weight:bold;color:blue;width:auto;height:auto;padding-top:2px;margin:0 3px;cursor:pointer;'); w.addEventListener('mousedown', function(e){ if(e.target == w){ e.preventDefault(); var grabX = e.clientX, grabY = e.clientY, origX = parseInt(w.style.left), origY = parseInt(w.style.top); var mouseMove = function(ev){ w.style.left = origX+ev.clientX-grabX+'px'; w.style.top = origY+ev.clientY-grabY+'px'; }; doc.addEventListener('mousemove', mouseMove, false); doc.addEventListener('mouseup', function(){doc.removeEventListener('mousemove', mouseMove, false)}, false); } }, false); doc.documentElement.appendChild(w); if(size){ cnt.style.height = size.height; cnt.style.width = size.width; } else{ for(var i = 3; i < 10; i++){ if(cnt.scrollHeight > cnt.offsetHeight || cnt.scrollWidth > cnt.offsetWidth){ cnt.style.height = 80*i+'px'; cnt.style.width = 160*i+'px'; } else break; } }; var docEle = (doc.compatMode == 'CSS1Compat' && win.postMessage) ? doc.documentElement : doc.body; var mX = docEle.clientWidth-w.offsetWidth, mY = docEle.clientHeight-w.offsetHeight; if(mX < 0){cnt.style.width = parseInt(cnt.style.width)+mX+'px'; mX = 0}; if(mY < 0){cnt.style.height = parseInt(cnt.style.height)+mY+'px'; mY =0}; var hW = parseInt(w.offsetWidth/2); w.style.left = (pos && pos.X < mX+hW ? (pos.X > hW ? pos.X-hW : 0) : mX)+'px'; w.style.top = (pos && pos.Y+10 < mY ? pos.Y+10 : mY)+'px'; w.style.visibility = 'visible'; doc.addEventListener('keydown', keyDown, false); return w; }; var getHash = function (txt) { TKK=eval('((function(){var a\x3d817046147;var b\x3d-335196159;return 410049+\x27.\x27+(a+b)})())'); function sM(a) { var b; if (null !== yr) b = yr; else { b = wr(String.fromCharCode(84)); var c = wr(String.fromCharCode(75)); b = [b(), b()]; b[1] = c(); b = (yr = window[b.join(c())] || "") || "" } var d = wr(String.fromCharCode(116)) , c = wr(String.fromCharCode(107)) , d = [d(), d()]; d[1] = c(); c = "&" + d.join("") + "="; d = b.split("."); b = Number(d[0]) || 0; for (var e = [], f = 0, g = 0; g < a.length; g++) { var l = a.charCodeAt(g); 128 > l ? e[f++] = l : (2048 > l ? e[f++] = l >> 6 | 192 : (55296 == (l & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (l = 65536 + ((l & 1023) << 10) + (a.charCodeAt(++g) & 1023), e[f++] = l >> 18 | 240, e[f++] = l >> 12 & 63 | 128) : e[f++] = l >> 12 | 224, e[f++] = l >> 6 & 63 | 128), e[f++] = l & 63 | 128) } a = b; for (f = 0; f < e.length; f++) a += e[f], a = xr(a, "+-a^+6"); a = xr(a, "+-3^+b+-f"); a ^= Number(d[1]) || 0; 0 > a && (a = (a & 2147483647) + 2147483648); a %= 1E6; return c + (a.toString() + "." + (a ^ b)) } var yr = null; var wr = function(a) { return function() { return a } } , xr = function(a, b) { for (var c = 0; c < b.length - 2; c += 3) { var d = b.charAt(c + 2) , d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d) , d = "+" == b.charAt(c + 1) ? a >>> d : a << d; a = "+" == b.charAt(c) ? a + d & 4294967295 : a ^ d } return a }; return sM(txt); }; var ujs_google_translate = function (dir){ var lng = window.navigator.language.slice(0, 2), txt = gContextMenuContentData.selectionInfo.fullText, l = dir.split('|'); var encTxt = encodeURIComponent(txt); var winWait = function(lng){createWindow('', (lng == 'ru' ? '\u041F\u0435\u0440\u0435\u0432\u043E\u0434\u0438\u043C' : 'Translating')+'\u2026', 'Google Translate', '_gt', window.navigator.lastClick)}; if (txt) { winWait(lng); var xhr = new XMLHttpRequest(); var url = 'https://translate.google.com/translate_a/single?client=t&sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t' + getHash(txt); var urle = "http://translate.google.com/translate_t?text="+encTxt+"&sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&ujs=gtt"; xhr.open('POST', url, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8'); xhr.onreadystatechange = function() { try{ if (xhr.readyState == 4 && xhr.status == 200) { var result = '', status = '', tmp = JSON.parse(xhr.responseText.replace(/\[(?=,)/g, '[0').replace(/,(?=,|\])/g, ',0')); for(var i = 0, n; n = tmp[0][i]; i++){ if(n[0])result += n[0].toString(); }; //result = '<span style="background-color:inherit;color:inherit;font-size:inherit;font-family:Times,serif;">' + result + '</span>'; status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + l[1].toUpperCase(); createWindow(result, status, '<a href="'+urle.replace(/&/g,'&')+'" style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:blue;font:17px Times New Roman;">Google Translate</a>', '_gt', window.navigator.lastClick); } } catch (x){LOG(x)}; }; xhr.send('q=' + encodeURIComponent(txt)); } else { var urlt = gBrowser.currentURI.spec; var url = "http://translate.google.com/translate?u="+encodeURIComponent(urlt)+"&hl="+lng+"&langpair="+dir+"&tbb=1"; var ctabpos = gBrowser.selectedTab._tPos +1; gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos); }; }; var contextMenu = document.getElementById("contentAreaContextMenu"); var nextEleMenu = document.getElementById("context-inspect"); var menuId = "context-ext-google-translate"; var menuItem = document.getElementById(menuId); if (menuItem) { contextMenu.removeChild(menuItem.nextElementSibling); contextMenu.removeChild(menuItem.nextElementSibling); contextMenu.removeChild(menuItem); }; menuItem = document.createXULElement("menuitem"); menuItem.setAttribute("id", menuId); menuItem.setAttribute("label", "Перевести на русский"); menuItem.setAttribute("class", "menuitem-iconic"); menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABBUlEQVR4Ac2RMU4DMRREB2MqihQpAkUaqnAduuQw4Sx03CGcJYIiDYqQ0lCsZ77535ZFcgAkRuPvV7zd/dLiz3N1PFb8hmRckrfELZrF9ONQ1B6Yz0MyM7S0O6zGkVprh/3+Kw/JzkHSpRpJKZkpr9fYbOx0cjVsCbWG31oHBM9mtt0q73ZcrdLhAMlYQKkUI22aqsNo8HKZAMQhvVaKSHWj2Q2aPU3mJQFY7nuHyvYFduP83WF3AJRfcPNYnr/Lp1G1uK4m9sno1LaUbnX/htf8BNzoneUD5NhjvLCMhURQSQ93QCZwXYjFwg3I0NZKrvoknQPMIHkt/jRAQKMeG2yX89/mB4EJbKbZxIhFAAAAAElFTkSuQmCC"); menuItem.addEventListener("command", function(){ujs_google_translate('auto|ru')}, false); contextMenu.insertBefore(menuItem, nextEleMenu); menuItem = document.createXULElement("menuitem"); menuItem.setAttribute("label", "Перевести на английский"); menuItem.setAttribute("class", "menuitem-iconic"); menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAAB5UlEQVR4AWOgPZg0c9+Oq2+qpx9LaQaiw4mNB27efbs2uXFNQh2Q4Zm9zSNth23MhqjGnXMC86vnHmUS4udxv7OvOd2yPE7PTlfCTk9GVVEoyJA7WI8dyPA0k3U1l+jJMV7CeThpTZeoKDdDUsvBPSff/V+6/P/Bvf///2+bdvU/EKRm/k9IBNIlfZe+LFrzvbsbyJ636pKkyQyQhoUb7tZNvPpw3/0/TfX/ISAm5n94BIiRm/n/xYsLd946ei4vajoiqDuRAejQf//+o4PQ0P9+fmhiQGVnrr1kXJNYG2zEzXDxDsPv3wy/fkFJoOTPn39+/fr/69e/37//AUX+/mXRkO458wWHDba2f8wswCyQ3N+/f//8/fP7z5+TV18w2Mdt6plzPiptx5Wr7/+/ffMzOR6kysjkt74hWMPfp06O+2dulZCeFZKwnkE4m8E8bN3i9aCQ+dxY96GrK6bkGJD9R1v3l6Y20NVW9kt+/v//ZdbcFwkxTVPPMQimM8XEqkb7a/zoqLxkH9v4zVyI5+///wyMmtKMmhJAnbLqQjHxaw5r2orOmZN5uj470Zahat6BKS7JzpmLBHXm8GhM5lCdcP7ai1ZpixZxk9NXXjKIFzOIFjAI54oY1vXuue5qmscw+AAAW0tKxtPoicEAAAAASUVORK5CYII="); menuItem.addEventListener("command", function(){ujs_google_translate('auto|en')}, false); contextMenu.insertBefore(menuItem, nextEleMenu); contextMenu.insertBefore(document.createXULElement("menuseparator"), nextEleMenu);
Отредактировано Andrey_Krropotkin (17-09-2019 07:45:32)
Отсутствует
Вот вы запарились с этим окошком... Использую кнопку только для перевода всей страницы, для окна QTranslate - даббл клик Ctrl рулит. Там и возможностей больше, а памяти он кушает минимально. Хотя, нет предела совершенству!))
Отредактировано xrun1 (17-09-2019 15:00:05)
Отсутствует
Dumby
Не знаете, почему поиск плагин в 69 невозможно сделать без https ? Могу сломать search-extensions и переделать на searchplugins, так настойки поиска не работают.
А в самих search-extensions только https...К примеру , http://seasonvar.ru/ , все никак...только https://seasonvar.ru/ , так сайт падает...Где плюсы новых версий?
Зато минусов, как грязи...
Отсутствует
почему поиск плагин в 69 невозможно сделать без https ?
Есть какая-то кнопка или вопрос чисто теоретический?
Если теоретический, то проблем нет. Пользуюсь ContextSearch web-ext Lite и через него поиск легко делается.
Ради интереса, сделал для http://seasonvar.ru/ --> картинка1 - добавлено в search.json.mozlz4, картинка2 - настройки в расширении.
Отсутствует
А я не пользуюсь, ни поисковыми плагинами, ни WebExtensions для них.
Но тоже, ради интереса, попробовал — нормально установилось, и в 69, и в 71.
Services.search.addEngine("data:text/xml," + encodeURIComponent(` <SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/"> <ShortName>seasonvar.ru</ShortName> <Description>Сериалы ТУТ! Сериалы онлайн смотреть бесплатно. Смотреть онлайн.</Description> <InputEncoding>UTF-8</InputEncoding> <Image width="16" height="16">data:image/x-icon;base64,AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEnmAAAAAAAKS+gGCUrnIwhJ5k8HSOVlCEnmeQlK54QISeaHCEnmiQhJ5okHSOWIB0jlhwhJ5oYISeaGCEnmhghJ5ogHSOVfAAAAAARF4gAJSudHB0jlXglK5w8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlK5wAQUe4ACEnmbghJ5usISeb/CEnm/AlK5/wJSuf/CUrn/glK5/4JSuf/CUrn/wpL6P8KS+j+CEnm/AlK5+gISebhCUrn+AhJ5sYAAAAACEnmuAhJ5v8ISeb/CEnmMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhJ5rMISeb/CEnmywhJ5g8AAAAACEnmnApL6P8KS+j/Ckvo/gpL6P8JSuf/Ckvo/wlK5/8KS+j9CEnm/wdI5SMISeYECUrnAgAAAAAISeb/B0jl0whJ5goKS+gBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJSudSCEnm/whJ5roAAAAAAAAAAAAAAAAISeb/CUrn/QpL6P8KS+j/Ckvo/wpL6P8JSuf/Ckvo/wlK5/4KS+j9B0jl9ANE4QALTOkAB0jlWQlK5/8ISeZaAAAAAAlK5wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhJ5pIISeb/CEnmRQpL6AAAAAAACEnmNwhJ5v8KS+j+Ckvo/wpL6P8KS+j/Ckvo/wpL6P8JSuf/CUrn/gpL6P4ISeb+B0jlNwAAAAAISeaoCEnm+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEnmgQhJ5v8ISeYzAAAAAAJD4AAHSOWiCUrn/wlK5/8KS+j+Ckvo/wpL6P8KS+j/Ckvo/wpL6P8KS+j/CUrn/glK5/8ISeZWAAAAAAlK5/UISebQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALTOkjB0jl/wdI5UwJSucAAAAAAAhJ5soJSuf+Ckvo/wlK5/8KS+j/Ckvo/wpL6P8KS+j/Ckvo/wpL6P8JSuf/CUrn/wdI5VcISeZSCEnm/wdI5aoHSOUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISebmCEnmjQAAAAAAAAAACEnm5ApL6P8JSuf+Ckvo/wpL6P8KS+j/Ckvo/wpL6P8KS+j/Ckvo/wpL6P8JSuf/B0jlRghJ5uYISeb/CEnmdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhJ5m4JSufKAAAAAAAAAAAJSuftCUrn/wpL6P8KS+j/Ckvo/wpL6P8KS+j/Ckvo/wpL6P8KS+j/Ckvo/glK5/8ISeaBCEnm/AlK5/8HSOU0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEnmCghJ5vcAAAAAAAAAAApL6O4JSuf/Ckvo/wpL6P8KS+j/Ckvo/wpL6P8KS+j/Ckvo/wpL6P8KS+j/CUrn/glK5/8JSuf+CEnm/whJ5hwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEnmowlK50MAAAAACUrn5glK5/4KS+j/CUrn/gpL6P8KS+j/Ckvo/wpL6P8KS+j/Ckvo/wlK5/8KS+j+Ckvo/wlK5/8JSuf/CUrnFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJSucvB0jl6AAAAAAISebKCUrn/glK5/4KS+j/Ckvo/wpL6P8KS+j/Ckvo/wpL6P8KS+j/Ckvo/wpL6P8KS+j+CUrn/wlK5/8HSOUYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISeb/CUrnDglK54QJSuf/Ckvo/wpL6P8KS+j/Ckvo/wpL6P8KS+j/Ckvo/wpL6P8KS+j/Ckvo/wlK5/8KS+j+CUrn/wdI5TIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdI5YoJSudHBEXiAghJ5v8JSuf+CUrn/gpL6P8KS+j/Ckvo/wpL6P8KS+j/Ckvo/wpL6P8KS+j/Ckvo/glK5/8JSuf/CEnmkQtM6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUrnDQhJ5qgAAAAACUrnkQlK5/8JSuj/Ckvn/glK5/8KS+j/Ckvo/wpL6P8KS+j/Ckvo/wpL6P8KS+j/CUrn/glK5/4ISebnAAAAAAxN6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFS7wAGR+QFCkvoAglK5wAJSucECEnm9gAAAAAKS+gZCUrm/QlK5v0JSuf+Ckvo/wlK5/4KS+j/Ckvo/wpL6P8KS+j/Ckvo/wpL6P8JSuf+Ckvo/ghJ5v8JSudfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISeYAAAAAAAdI5dMJSueTAAAAAAdI5QMHSOX3CEnmAQAAAAAJSuciCEnm/wlK5/4JSuf+Ckvo/wpL6P8KS+j/Ckvo/wpL6P8KS+j/Ckvo/wpL6P8JSuf/Ckvo/ghJ5uwHSOUDCEnmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEnm7AhJ5s0AAAAABEXiBAlK56kAAAAAC0zpAAAAAAAJSucoB0jl/QlK5/4JSuf+Ckvo/wpL6P4KS+j/Ckvo/wpL6P8KS+j/Ckvo/wpL6P8JSuf+CEnm/AdI5QsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGR+RfB0jl+AdI5aQJSufbCEnmFwAAAAAAAAAAAAAAAAhJ5gAJSucVCUrnvAhJ5v8KS+j+Ckvo/glK5/8KS+j/Ckvo/wpL6P8KS+j/Ckvo/wpL6P4ISeb4CEnmCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUrnOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlK5wAAAAAACUrnZghJ5ugISeb/CUrn/glK5/4JSuf+Ckvo/wpL6P8JSuf/Ckvo/ghJ5vAHSOUDCUrnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJSucABEXiAAdI5T4ISeb/CUrn/gpL6P8KS+j/Ckvo/wpL6P4ISeb/CUrnvglK5wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhJ5tEJSuf+Ckvo/wpL6P8KS+j/CUrn/wlK5/4JSucNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUrnzAlK5/0JSuf+Ckvo/gpL6P8KS+j+CEnm/whJ5rcAAAAAAAAAAAhJ5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlK5wAHSOVGCUrn9wlK5/4KS+j/Ckvo/wlK5/8JSuf+CEnm/whJ5vwISea0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJSudPCUrn/wlK5/4KS+j/CUrn/gpL6P8JSuf+CUrn/ghJ5v8ISeZkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZH5FsJSuf/CUrn/gpL6P8KS+j/Ckvo/wpL6P8JSuf+CUrn/gdI5boAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0zpFwhJ5v8ISeb+Ckvo/wpL6P8KS+j/Ckvo/glK5/8ISebDCEnmCAhJ5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEnmQwlK5/8JSuf+CUrn/glK5/4JSuf/CUrn/whJ5jIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlK5wAAAAAACEnmZwhJ5voJSuf+CEnm+ghJ5p0LTOkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHSOUACUrn5whJ5vsJSuf1AAAAAAJD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlK5wAHSOVWCEnm/whJ5uAEReIGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEnmAAAAAAAHSOVDCEnmJAZH5AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+AH//wAAj/xgB5/84AO/+eADP/nAAz/9wAM//MACf/7AAH/+wAB//sAAf/9AAH//QAB//2AAP/+gAD//sAA/+bgAH/m8AB/8fgAf//+AH///4B///+A////gH///8Af///gH///4A///+Af///wP///+H////j////8//////8=</Image> <Url type="text/html" method="GET" template="http://seasonvar.ru/search"> <Param name="q" value="{searchTerms}"/> </Url> <SearchForm>http://seasonvar.ru/</SearchForm> </SearchPlugin> `), null, null);
помоги разобраться с еще одной для многопроцессорного
Я же давал ссылку чуть выше, или думаешь дело в другом?
Если я правильно понимаю, теперь, в многопроцессном Firefox, при попытке
загрузить в родительском процессе какой-нибудь документ с http(s) адресом,
или даже data: или blob: — nsDocShell будет показывать фигу.
То есть <iframe> не подходит, нужен <browser>, как в сайдбаре.
Могу попытаться сделать набросок, чтобы было от чего оттолкнуться.
(xul => { var hidden = true; var df = MozXULElement.parseXULToFragment(xul); var [splitter, box, menuitem] = df.children; var btn = box.querySelector("toolbarbutton"); btn.handleCommand = () => splitter.hidden = box.hidden = hidden = !hidden; var popup = document.getElementById("tabContextMenu"); popup.insertBefore(menuitem, popup.firstChild.nextSibling); var tab = box.querySelector("tab"); var setTab = set => set ? gBrowser._tabForBrowser.set(tab.linkedBrowser = box.lastChild, tab) : gBrowser._tabForBrowser.delete(box.lastChild); setTab(true); var destroyBrowser = br => { br.messageManager.loadFrameScript( "data:,docShell.createAboutBlankContentViewer(null,null)", false ); setTab(); br.remove(); } var principal = { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() }; var getBrowser = Services.appinfo.browserTabsRemoteAutostart ? tab => { var br = box.lastChild; var type = tab.linkedBrowser.remoteType; if (br.remoteType != type) { destroyBrowser(br); br = br.cloneNode(false); if (type) br.setAttribute("remote", true), br.setAttribute("remoteType", type); else br.removeAttribute("remote"), br.removeAttribute("remoteType"); box.append(br); setTab(true); } return br; } : () => box.lastChild; menuitem.handleCommand = () => { hidden && btn.handleCommand(); var tab = TabContextMenu.contextTab; getBrowser(tab).loadURI(tab.linkedBrowser.currentURI.spec, principal); } addDestructor(() => { destroyBrowser(box.lastChild); for(var node of [splitter, box, menuitem]) node.remove(); }); document.getElementById("appcontent").append(df); })(` <splitter id="SNote-splitter" orient="vertical" hidden="true"/> <vbox id="SNote-panel" height="300" hidden="true"> <toolbox> <toolbar> <tabs flex="1"> <tab collapsed="true"/> </tabs> <toolbarbutton class="tabs-closebutton" oncommand="handleCommand();" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACt0lEQVQ4jaWSzUtUYRTGn/fcGZ25H+m9Iyne8fpFq4lGCsFFIW21NiKKuHIn4qpazDraabnMTVEh+Af0B0QIIohBowhlkM1MMTre+VLngzv3PW1SKWvVWR0eOL/zcM4jmBn/U4G/iTuzsyK7unoLUl4HABDtdExNbV1fXr60Tfzp4J1h3Dd1/ak1OHhN7+kBiHCaTsPd2NgrlMsP7x4fv/0nYE3XH9ix2GLbzIwQmvYbmCsVHL16xd+3tx/dOTl5dqbTWfPeMIavOs6COT0tmBmyWAS1toJaWyGLRbCUMKemxFXHWXhvGMOXACrw2BwdJYUITX190MbG4O/twf/yBdrYGJr6+6EQwbx3j1QhHv8GWDfNNjUavR3u6ACyWQRjMQRsG+rkJNSJCQRsG8FYDDKbRbi9Harj3F43zbYLB41Gr2bbRIUCFACnS0vwMhkEbBsB24aXyaCcSEDJZiFyOWidnYRGo/f8jQpQp9NTiFwOACCJACEuDsgMeXAAuC7YMECeBwWonwOaLOtT/evXMhTlSs00oS8vI2jbqGcyADOau7pgvHiB8vg4tMND1F233GRZn87pzIwtXX9eiEb5uLubC2/ecC2V4qOhIT4aGuJqKsX516/52HG4EI3ylq4/P5s7z8FHy2qXnvehOxTqDBGhFongiusCAMqWhVA+j5qU+Far/RDB4M2BfP7gUpCSLS03qr7/NiyEExEC6i+9AsBlRpU5FVaU+zdKpeSlHCSTSazOzW0XNW2gCjzZ9/3Pu77Pu77P+77/uQo8cTVt4OXMzM7a2tpFlBOJhFhZWWkulUphz/NUKWWYmUPM3GwCKgBRAKoA6kRUI6JKIBCo6rpeGRkZqQlmRjqdxuLiIm1ublIul6NKpaI0Gg3yfV8AABFxMBiUoVBIRiIRPx6Py/n5eRmPx/ETBvM/dPD/rBwAAAAASUVORK5CYII=" /> </toolbar> </toolbox> <browser flex="1" type="content" id="SNote-browser" tooltip="aHTMLTooltip" disableglobalhistory="true" context="contentAreaContextMenu" /> </vbox> <menuitem class="menuitem-iconic" id="TabSNote" oncommand="handleCommand();" label="Открыть в нижней панели" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMjHxIGmVAAABKUlEQVQ4T6WS24qDMBRF/f9fHCi1ijHkQi7kRqJ7jpYZYSxMi8J6CezlyT7p6MNFXh5+wsvDT+hQ2opcn6TyJG7kJ4HwcYXxDcoWCJXhXD4E67r+y7IsKKUipYwQElpO7wtaW5BzRYwF3idYG5FCfE9w/PknHKC1R3D+EEi6j3LlhLQZs04YRcBjdrhPFrdB46tXuI/qEFykg0vUbqi/SF8hqG1utgkyJhUxyogHD+hnjzvz0MoegtPdqbRaGhKVFjytzG4BB8EtZqYx0fh8kmfBsqyote2Nh1CosARjAqR04BSeJoNhUOh7iWkQZ0Gtx7q2h2JMhFJ+DzO2hfUevt0Ehp7/FSxEo/ELVnokNSYkWlWwDk4ZaKEhGY0+crCBQ7H5EFwCuAK6b7kpsLGbUcTpAAAAAElFTkSuQmCC" /> `);
и еще вот перестала правильно работать
Ну да, откуда "load" то возьмётся, load "там" остался.
Что-нибудь другое попробуй, типа
(num => { var lst = type => addEventListener(type, func, false, gBrowser.tabContainer); var func = e => e.detail.changed.includes("label") && num(e.target, e.target._tPos); lst("TabAttrModified"); (func = () => gBrowser.visibleTabs.forEach(num))(); for(var type of ["TabOpen", "TabClose", "TabMove"]) lst(type); })( (tab, ind) => tab.label = (ind + 1) + " \u202D" + tab.label.match(/(?:^\d+ \u202D)?(.+)/)[1] );
Отсутствует
Отсутствует
Dumby спасибо разобрался
Отсутствует
что то не работает
69
(sss => { var pref = `CB.${_id.slice(20)}.setStyleForPage`; var url = "data:text/css," + encodeURIComponent(this.Help); var args = [Services.io.newURI(url), sss.AGENT_SHEET]; var reg = add => { var has = sss.sheetRegistered(...args); if (add) has || sss.loadAndRegisterSheet(...args); else has && sss.unregisterSheet(...args); } var setState = () => { var state = Services.prefs.getBoolPref(pref, false); this.icon.style.backgroundColor = state ? "#131d24" : "#ffeeaa"; reg(state); } setState(); this._handleClick = () => Services.prefs.setBoolPref( pref, !Services.prefs.getBoolPref(pref, false) ); Services.prefs.addObserver(pref, setState, false); addDestructor(reason => { Services.prefs.removeObserver(pref, setState); reason[5] == "e" && reg(); }); })( Cc["@mozilla.org/content/style-sheet-service;1"] .getService(Ci.nsIStyleSheetService) );
Отсутствует
Dumby Столкнулся с моментом упорядочить закладки. Был у меня старый скрипт от Alice0775, который он давно забросил - в контекстном меню закладок создавал пункт - Открыть в библиотеке, т.е. открывалось местоположение в библиотеке в развернутом дереве папок. Раньше им давно пользовался. Сейчас естественно не работает.
/*Initialization Code*/ //--------------------- Открыть в бибилиотеке в контекстном меню закладок // @author Alice0775 //https://github.com/alice0775/userChrome.js/blob/master/openLibraryContextMenu.uc.xul (function () { var openLibraryContextMenu = { node: null, organizer: null, get ios() { return Components.classes["@mozilla.org/network/io-service;1"] .getService(Components.interfaces.nsIIOService); }, get bmsvc() { return Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"] .getService(Components.interfaces.nsINavBookmarksService); }, showOrganizer : function () { var view = PlacesUIUtils.getViewForNode(document.popupNode); this.node = view.selectedNode; var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator); this.organizer = wm.getMostRecentWindow("Places:Organizer"); if (!this.organizer) { this.organizer = openDialog("chrome://browser/content/places/places.xul", "", "chrome,toolbar=yes,dialog=no,resizable"); this.organizer.addEventListener("load", this, false); } else { this.selectNode(this.node); } }, getParentFolderByItemId: function(aNode){ var parentFolderId = null; var itemType = PlacesUtils.nodeIsFolder(aNode) || PlacesUtils.nodeIsTagQuery(aNode) ? "folder" : "bookmark"; var concreteId = PlacesUtils.getConcreteItemId(aNode); var isRootItem = PlacesUtils.isRootItem(concreteId); var itemId = aNode.itemId; if (isRootItem || PlacesUtils.nodeIsTagQuery(aNode)) { itemId = concreteId; } parentFolderId = this.bmsvc.getFolderIdForItem(itemId); return parentFolderId; }, selectNode: function(aNode) { var itemType = PlacesUtils.nodeIsFolder(aNode) || PlacesUtils.nodeIsTagQuery(aNode) ? "folder" : "bookmark"; var concreteId = PlacesUtils.getConcreteItemId(aNode); var isRootItem = PlacesUtils.isRootItem(concreteId); var itemId = aNode.itemId; if (isRootItem || PlacesUtils.nodeIsTagQuery(aNode)) { itemId = concreteId; } var isFolder = PlacesUtils.nodeIsFolder(aNode); if (isFolder) { this.selectLeftPane([itemId]); } else if (PlacesUtils.nodeIsQuery(aNode)) { var folderId = aNode.parent.itemId; if (folderId){ this.selectLeftPane([folderId]); } this.selectRightPane([itemId]); } else { var folderId = this.getParentFolderByItemId(aNode); if (folderId){ this.selectLeftPane([folderId]); } this.selectRightPane([itemId]); } setTimeout(function(self){ self.organizer.window.focus(); }, 1, this); }, selectRightPane: function(rightPaneItemIds) { var places = this.organizer.document.getElementById("placeContent"); places.selectItems(rightPaneItemIds, true); var tbo = places.treeBoxObject; tbo.ensureRowIsVisible(places.currentIndex); }, selectLeftPane: function(leftPaneItemIds) { var places = this.organizer.document.getElementById("placesList"); places.selectItems(leftPaneItemIds, true); var tbo = places.treeBoxObject; tbo.ensureRowIsVisible(places.currentIndex); }, selectOnLoad: function() { setTimeout(function(self){ self.selectNode(self.node); }, 1, this); this.organizer.removeEventListener("load", this, false); }, handleEvent: function(event){ switch (event.type){ case 'load': this.selectOnLoad(event); break; } } } if ( document.getElementById("placesContext_manageFolder") ) return; var copyBothMenuItem = document.createXULElement("menuitem"); copyBothMenuItem.id = "placesContext_manageFolder"; copyBothMenuItem.setAttribute("label", "Открыть в библиотеке"); copyBothMenuItem.setAttribute("selection", "bookmark|folder|query|livemark/feedURI"); copyBothMenuItem.setAttribute("closemenu", "single"); copyBothMenuItem.addEventListener("command", function () { openLibraryContextMenu.showOrganizer(); }); var copyMenuItem = document.getElementById("placesContext_openSeparator"); copyMenuItem.parentNode.insertBefore(copyBothMenuItem, copyMenuItem); })();
Отсутствует
накидать новую для многопроцессорного
Вот причём здесь многопроцессность
(popup => addEventListener("popupshowing", { openFoldersInRightPane: false, handleEvent() { if (this.shouldHide) return; var menuitem = document.createXULElement("menuitem"); menuitem.setAttribute("label", "Открыть в библиотеке"); menuitem.setAttribute("oncommand", "openInLibrary();"); menuitem.setAttribute("id", "placesContext_open:library"); popup.querySelector("#placesContext_openSeparator").before(menuitem); addDestructor(() => menuitem.remove()); this.handleEvent = e => e.target == popup && ( menuitem.hidden = menuitem.disabled = this.shouldHide ); menuitem.openInLibrary = () => { var win = Services.wm.getMostRecentWindow("Places:Organizer"); if (win) return win.focus(this.onLibrary(win)); win = openDialog( "chrome://browser/content/places/places.xul", "", "chrome,toolbar=yes,dialog=no,resizable" ); win.addEventListener("pageshow", () => this.onLibrary(win), {once: true}); } }, get shouldHide() { var tn = popup.triggerNode; if (tn.id == "PlacesChevron") return true; var node = tn._placesNode || popup._view.result.root; if (!node) return true; this.data = [ node.bookmarkGuid, node.parent && node.parent.bookmarkGuid, PlacesUtils.nodeIsFolder(node)/* || PlacesUtils.nodeIsQuery(node)*/, node.pageGuid ]; return false; }, async onLibrary(win) { var [guid, parentGuid, isFolder, pageGuid] = this.data; var list = win.document.getElementById("placesList"); var tree = win.document.getElementById("placeContent"); var onlyLeft = isFolder && !this.openFoldersInRightPane; var search = tree.result.root.uri.startsWith("place:terms="); var vRoot = PlacesUtils.virtualAllBookmarksGuid; if (!onlyLeft || search) { if (PlacesUtils.bookmarks.userContentRoots.includes(guid)) parentGuid = vRoot; else if (!parentGuid) parentGuid = (await PlacesUtils.bookmarks.fetch(guid)).parentGuid; } if (search) { var trgGuid = onlyLeft ? guid : parentGuid; if (PlacesUtils.getConcreteItemGuid(list.selectedNode) == trgGuid) list.selectItems([vRoot]); else { var rows = list.view._rows, lastRow = rows[rows.length - 1]; if (lastRow.bookmarkGuid == vRoot) lastRow.containerOpen = true; } } if (onlyLeft) { list.selectItems([guid]); return list.focus(this.scroll(list)); } list.selectItems([parentGuid]); this.scroll(list); if (guid) tree.selectItems([guid]); else if (pageGuid) { var ind = tree.view._rows.findIndex( r => r.pageGuid && r.pageGuid == pageGuid ); if (ind != -1) tree.view.selection.clearSelection(), tree.view.selection.rangedSelect(ind, ind, true); } await new Promise(resolve => setTimeout(resolve, 100)); tree.focus(this.scroll(tree)); }, scroll(tree) { var pos = .35; var visibleRows = tree.getPageLength(); var ind = tree.view.selection.currentIndex; var first = tree.getFirstVisibleRow(); var newFirst = ind - pos*visibleRows + 1; tree.scrollByLines(Math.round(newFirst - first)); } }, false, popup || 1))(document.getElementById("placesContext"));
Отсутствует
Dumby большое спасибо
Отсутствует
Dumby подскажи, вот есть такой код
// добавить страницу в закладки в указанной папке .... function addBookmark(folder, id) { var title = gBrowser.selectedTab.label; var folderId = PlacesUtils.getConcreteItemId(folder); var index = id ? PlacesUtils.bookmarks.getItemIndex(id) + 1 : 0; var readOnlyFolder = PlacesUtils.nodeIsQuery(folder) || PlacesUtils.annotations.itemHasAnnotation(folderId, PlacesUtils.LMANNO_FEEDURI); if ( !readOnlyFolder ) PlacesUtils.bookmarks.insertBookmark(folderId, gBrowser.currentURI, index, title);
Отсутствует
если я нажимаю на штатную кнопку "добавить страницу в закладки", то сохраняется без нумерации
Что мешает посмотреть как это делает браузер?
Вот, цитата из кода PlacesCommandHook.bookmarkPage()
async bookmarkPage() { let browser = gBrowser.selectedBrowser; let url = new URL(browser.currentURI.spec); ..... let isErrorPage = false; if (browser.documentURI) { isErrorPage = /^about:(neterror|certerror|blocked)/.test( browser.documentURI.spec ); } try { if (isErrorPage) { let entry = await PlacesUtils.history.fetch(browser.currentURI); if (entry) { info.title = entry.title; } } else { info.title = browser.contentTitle; } info.title = info.title || url.href;
var tab = gBrowser.selectedTab; tab.textLabel.textContent = "bla"; alert(tab.label);
Отсутствует
Здравствуйте, у всех неподписанные дополнения пашут? вроде бы они пашут но иконок нет, вот CB пашет и другие но иконок(пробовал вызвать через настройки, так окно не разворачивается будто 0px).
Отсутствует
Dumby ради интереса попытался создать кнопку в URL-bar, там где многоточие
if ( document.getElementById("reloadButton") ) return; var icon1="блаблабла"; var reButton = document.createXULElement("toolbarbutton"); reButton.setAttribute("class", "subviewbutton subviewbutton-iconic pageAction-panel-button"); reButton.setAttribute("id", "pageAction-panel-reloadButton"); reButton.setAttribute("label", "Обновить"); reButton.setAttribute("command", "Browser:ReloadOrDuplicate"); reButton.setAttribute("image", icon1); Варианты: 1. const contextMenu = document.getElementById('pageAction-panel-bookmark') contextMenu.parentNode.insertBefore(reButton, contextMenu); 2. const contextMenu = document.getElementById("pageActionPanelMainView"); contextMenu.appendChild( reButton );
Там где многоточие: toolbarbutton [348×24] namespaceURI: XUL margin: 0 border: 0 padding: 4px 12px id = pageAction-panel-copyURL class = subviewbutton subviewbutton-iconic pageAction-panel-button actionid = copyURL label = Копировать ссылку URL-bar: image [24×24] namespaceURI: XUL margin: 0 border: 0 padding: 4px id = pageAction-urlbar-copyURL class = urlbar-icon urlbar-page-action actionid = copyURL aria-label = Копировать ссылку role = button tooltiptext = Копировать ссылку
Отсутствует
Dumby Вы бы не могли пожалуйста, починить эту кнопку для 68 версии, если можно.
https://forum.mozilla-russia.org/viewtopic.php?id=59458
У меня есть похожая, может подойдёт
((popup, {lastChild} = popup, pref = "CB.bookmarkFolderGuidForSaving") => addDestructor(reason => reason == "delete" && Services.prefs.clearUserPref(pref)) + addEventListener("popupshowing", { index: 0, // 0 - первой, PlacesUtils.bookmarks.DEFAULT_INDEX - последней width: 500, height: 640, nodePosition: .35, handleEvent(e) { if (this.shouldHide) return; var menuitem = document.createElementNS(xulns, "menuitem"); menuitem.id = "context-addBookmark"; menuitem.className = "menuitem-iconic"; menuitem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACD0lEQVR42oWTXUhTYRiAP89qziAYepG6TfAiyV1JsFojMJrVjf3dDOsmMoOwCwnSXLSJXgWDqAWBF7aGoFGGV0EUrL9FERoh1bQsqeiXfrzoB0N6es8528ncaC88fOfwnff53vN976eUUprafJk8lPIKS1XRkI8LRVayUVgmLBFsQklBwfhb8rAkRauSidQLDK49/zvqFKmqxBKcn4BzDzBGnU39BVZfTMOxQ6ZIXk6msdh7wUz+9IP/RraaLYYgfAUL73Fz8tJjs5rBh3B2HPrvQ/P+N8TvYJAVdBqCfRcxWH8aYm0dpCIRxvr6SG7bSWLrDsZ6e7ke7SESaiV61UoeFVoMwfYEBrGWNr6NjEAmY5JKmUxPw9QU35NJDq/ekBOcEqoNQSAOnh5Ih0IwPAwJsQ0MSP2DMDTEfDTKV7+f904nN12uBavr/SECZ6dZ1u11Aejqgu5u2ZAwv9vbmfP5mLXZeK0UrzSNGy53bnWXdYw6K47CEX8znwMB5oNBvtTX87G0lA+SmEueqazkYHWdLtgl1OVaybvwfPd41vLI42HGbicjiZPCy7IyntTUcKBqpZ58Iru61dZ6a64RwkJMmGi022dv1dbyrKKCp+XlpOW5yeH4KXPvhMbs3fgndJtDqDJ3VjX4NO3MqNs9J/xapWn3sv/dlJfcGr+rFbijunC5EBQ6hN2C27j6i+IP/uDMhPNYgHUAAAAASUVORK5CYII="); menuitem.setAttribute("oncommand", "linkedObject.oncommand(event);"); menuitem.linkedObject = this; menuitem.oncontextmenu = e => this.pick(e.preventDefault()); lastChild.after(menuitem); addDestructor(() => menuitem.remove()); (this.handleEvent = e => e.target == popup && !(menuitem.hidden = this.shouldHide) && this.update(menuitem) )(e); }, ons: ["isContentSelected", "onTextInput", "onImage", "onVideo", "onCanvas", "onAudio"], get shouldHide() { if (gContextMenu.onLink) return false; return this.ons.some(on => gContextMenu[on]); }, oncommand(e) { this[e.ctrlKey || e.shiftKey ? "pick" : "bookmark"](e.target); }, get guid() { return Services.prefs.getStringPref(pref, PlacesUtils.bookmarks.toolbarGuid); }, async update(menuitem) { var info = await PlacesUtils.bookmarks.fetch(this.guid); var title = PlacesUtils.bookmarks.getLocalizedTitle(info); menuitem.label = "Добавить закладку в: " + ( menuitem.folderName = title || "[без заголовка]" ); }, pick() { var features = "chrome,all,resizable,centerscreen,modal"; window.openDialog(this.url, "_blank", features, this.guid); }, bookmark({folderName}) { if (gContextMenu.onLink) { var url = gContextMenu.linkURL; var title = gContextMenu.linkText(); } else { var url = gBrowser.currentURI.spec; var title = gBrowser.contentTitle || gBrowser.selectedTab.label; } var info = {url, title, parentGuid: this.guid, index: this.index}; PlacesUtils.bookmarks.insert(info).then( () => this.notify(title, "Добавил закладку в папку: " + folderName), err => this.notify("Ошибка", err) ); }, get alert() { var as = this.as = Cc["@mozilla.org/alerts-service;1"] .getService(Ci.nsIAlertsService); this.alertName = _id + "-bookmark-alert"; delete this.alert; return this.alert = as.showAlertNotification .bind(as, "chrome://global/skin/icons/warning.svg"); }, notify(title, msg) { this.alert(title, msg, false, null, null, this.alertName); setTimeout(() => this.as.closeAlert(this.alertName), 1800); }, get url() { var xul = `<?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <?xml-stylesheet href="chrome://browser/content/places/places.css"?> <?xml-stylesheet href="chrome://browser/skin/places/places.css"?> <?xml-stylesheet href="chrome://browser/skin/places/tree-icons.css"?> <dialog xmlns="${xulns}" id="bookmark-folder-saver-dialog" windowtype="bookmark-folder-saver:dialog" title="Выберите папку" buttons="accept,cancel" onload="init();" width="${this.width}" height="${this.height}"> <script type="application/javascript" src="chrome://global/content/globalOverlay.js"/> <script type="application/javascript" src="chrome://browser/content/utilityOverlay.js"/> <script type="application/javascript"><![CDATA[ ChromeUtils.defineModuleGetter(window, "PlacesUtils", "resource://gre/modules/PlacesUtils.jsm"); ChromeUtils.defineModuleGetter(window, "PlacesUIUtils", "resource:///modules/PlacesUIUtils.jsm"); ChromeUtils.defineModuleGetter(window, "PlacesTransactions", "resource://gre/modules/PlacesTransactions.jsm"); ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm"); XPCOMUtils.defineLazyScriptGetter(window, "PlacesTreeView", "chrome://browser/content/places/treeView.js"); XPCOMUtils.defineLazyScriptGetter( window, ["PlacesInsertionPoint", "PlacesController", "PlacesControllerDragHelper"],\n\ "chrome://browser/content/places/controller.js"\n\ ); ]]></script> <script type="application/javascript" src="chrome://browser/content/places/places-tree.js"/> <tree id="tree" type="places" is="places-tree" place="place:type=${ Ci.nsINavHistoryQueryOptions.RESULTS_AS_ROOTS_QUERY }&excludeItems=1&excludeQueries=1" hidecolumnpicker="true" seltype="single" flex="1"> <treecols> <treecol id="title" flex="1" primary="true" hideheader="true" /> </treecols> <treechildren /> </tree> <script type="application/javascript"><![CDATA[ var tree = document.getElementById("tree"); function init() { tree.selectItems([window.arguments[0]]); var ind = tree.view.selection.currentIndex; ind != -1 && setTimeout(() => { if ("nsITreeBoxObject" in Ci) { var tbo = tree.treeBoxObject; var visibleRows = tbo.height/tbo.rowHeight; } else { var tbo = tree; var visibleRows = tbo.getPageLength(); } var cur = tbo.view.selection.currentIndex; var first = tbo.getFirstVisibleRow(); var newFirst = cur - ${this.nodePosition}*visibleRows + 1; tbo.scrollByLines(Math.round(newFirst - first)); }, 0); var onKeydown = e => e.ctrlKey && e.key == "Enter" && !e.shiftKey && document.documentElement.acceptDialog(e.stopPropagation()); addEventListener("keydown", onKeydown, true); addEventListener("dialogaccept", dialogCallback); window.onunload = () => { removeEventListener("keydown", onKeydown, true); removeEventListener("dialogaccept", dialogCallback); } } function dialogCallback() { var ind = tree.view.selection.currentIndex; if (ind == -1) return; var item = tree.view.nodeForTreeIndex(ind); item && Services.prefs.setStringPref( "${pref}", PlacesUtils.getConcreteItemGuid(item) ); } ]]></script> </dialog>`; var url, type = "application/vnd.mozilla.xul+xml"; if (parseInt(Services.appinfo.platformVersion) >= 69 && Services.appinfo.browserTabsRemoteAutostart) { url = `chrome://custombuttons/content/cbfolderpicker${Date.now()}.xul`; var ams = Cc["@mozilla.org/addons/addon-manager-startup;1"].getService(Ci.amIAddonManagerStartup); this.helper = ams.registerChrome( Services.io.newFileURI(Services.dirsvc.get("ProfD", Ci.nsIFile)), [["override", url, `data:${type},${encodeURIComponent(xul)}`]] ); addDestructor(this.helper.destruct); } else { url = URL.createObjectURL(new Blob([xul], {type})); addDestructor(() => URL.revokeObjectURL(url)); } delete this.url; return this.url = url; } }, false, popup || 1))(document.getElementById("contentAreaContextMenu"));
Можете ли Вы привести простейший пример такой кнопки?
Могу, наверно
((id, g) => addDestructor(reason => id in g && g[id].destroy(reason)) || id in g || ({ actions: [{ title: "Обновить", tooltip: "tooltip", iconURL: "chrome://browser/content/robot.ico", id: "reloadButton", _insertBeforeActionID: "copyURL", onCommand: (e, btn) => e.view.BrowserReloadOrDuplicate(e) }], init() { g[id] = this; this.actions = this.actions.map(action => { action.extensionID = "custombuttons@xsms.org"; return g.PageActions.addAction(new g.PageActions.Action(action)); }); }, destroy(reason) { if (reason[5] != "e") return; delete g[id]; for(var action of this.actions) action.remove(); } }).init())( "CBPageActionsMaker", Cu.import("resource:///modules/PageActions.jsm", {}) );
Отсутствует