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

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№1655116-07-2022 20:12:02

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 78.0

Re: Custom Buttons

ВВП
Вроде так должно работать, теоретически
Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_DOM_STORAGES, () => {});

Отсутствует

 

№1655216-07-2022 20:26:27

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 332
UA: Firefox 102.0

Re: Custom Buttons

Dumby пишет

, () => {});

От до этого не допер,класс!
Не понял юмора, в 103 шрифты увеличились и окна тоже... отвязали от оси ? Или appearance ?
Что здесь не так ? В 103 -не работает

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

Выделить код

Код:

function saveFavicon() {
       var uri = gBrowser.currentURI;
       function getSiteName() {
                  try { var domain = uri.host.split('.') } catch(e) { return "" };
                   domain = (domain.length == 2) ? domain[0] : domain[1]
                   return domain.charAt(0).toUpperCase() + domain.slice(1).split('.')[0] + " ";  
            };
    var url = gBrowser.selectedTab.image;
    url && saveImageURL(
        url, getSiteName(), null, false, false, null, null,
        /^data:(image\/[^;,]+)/i.test(url) ? RegExp.$1.toLowerCase() : Cc["@mozilla.org/mime;1"]
            .getService(Ci.nsIMIMEService).getTypeFromURI(Services.io.newURI(url)),
        null, PrivateBrowsingUtils.isContentWindowPrivate(content || window), document.nodePrincipal
    );
};


Так, никого не трогает. По-ходу 103 не нужен из-за этих гемморов.
И текст в файл тоже не того...(кн.скриншот)
скрытый текст

Выделить код

Код:

// Save, от 07.03.2017. .............
self.label = "Save";
self.setAttribute("type", "menu");


var folderpath="C:\\Users\\Desktop";         // папка для сохранения иконок для ярлыков и ярлыков сайтов

// Создать меню для кнопки .............
var array = [
   { label: "Сохранить значок веб-сайта", func: "saveFavicon()", image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAACPVBMVEX09ff////C3L+Uq8+Vq8+Uqs+Zr9CZrtCZr9Gfu+ear8+mt9JRf8ORxl3t8vfF06+Twojs8/d9otl8o9s+aquZrs/X9KLp8Pft8fZhisf//+DBzN2hveihv+pii8hti9pgicl6oNlojs1zncNsi836/P2duebx8/eYyWqBp+Gn0IKBvlKHsm9qmaVuk8zt7/FEbauEv1Tp7/JdhL9oi9Pl8e2LwlmdsdD7/P76+/3H7ofo8+peh8eHwFaSteZ0pkp2gl7q8/Ohy5OApt2by2eZuOqbuOWaezWuvtd7nN2HvWxul9Ty9feQxV5ljcqBp+JEcLCVtOOo0nR7odx5n9suX6Z1mtBzmtSXyGPv9PewzfOzx+O6zu/s8fd9o95Xfrthi8lYhMN5oNnw9ffw9Pjw9Pf8/f6ewO/m8O9zmdE6aapsjdyUwouPxWPDzd6XteOSs9B5nNVpnpqHt7h/s6F6n9d7ntSTttGHwVh4qp+Ev1HH7ox6qk5wj+Hm8e3t9fOm0IKAtqOBpNrx+P9ljcyhs9FpkM2hv+/u8/fF0eOLu4N+vFKgzX3p9OSFqN13qExekIl4n9j7/P3x9PhxmNDm8e9Vg8Zfkozr8veq0YTX9qL//92AtamOwnHFz96Fot1diMh+pd13ntmatu+YyW/3+/+Tqs5UgcShzJNbhsdTf8GHs7bo8PaXtuqMr+Ty8/SZt+SUqs7r7Ox3ndb9/f7t8feZyXGYyWWCpNbz9PRuiteNtNDn7/V4ntjx8fGo3JqNAAAAv3RSTlP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AEVuhDkAAAD+SURBVBhXY5jHzcUMAqxAICq9bx8D96adDFAgaGQOFOBaH7h7zoqZDTlFyptncAAFWBjyi52CXCI0unRLxcECPhsatbbzmlXMnS60hg0kkOxW0uNrq93tNaFpD1ggUm21QK532ZQdSm1hmXKdDCwdnOWVOi1RjNGMQCCrwMDMJ8NZ4LAynVGPkXFp8zpJBubYmn579wXtqhZb0iwn9a1iWLaViYmJ3891obOwYtLEvcYMGyWAAkwJdv6accEhi8LjGVr11SenpC5f61g3NcO0vjCAIc+DjZ2dnWexddWSbYa9nlkM+8BgWsxsK7FZ1VLzRaACNokmtdnyu1QMQgF7Rlh4zWWTAwAAAABJRU5ErkJggg=="},
   { label: "Запомнить значок веб-сайта как base64", func: "copyFaviconData()", image: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAI2bv/9RVpf/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAACIkvD/Jia6/ywpq/8AAAAAAAAAAAAAAAAAAAD/AAAA/wbwAf90qpv/Ymic/1RWqP9OUKr/W2Ch/2dumf9YYKT/Ly/B/xQP3/8MB9P/JCGb/wAAAAAAAAAAAAAAAAAAAP8G8AH/U5ea/ycr8f8VIP3/HiP4/ywo8v8sIvb/LCL2/ywi9v8KBOj/BQDe/wQAtv8tK4P/AAAAAAAAAAAAAAD/BvAB/3Sqm/9iaJz/Tim3/0UuuP9GPrT/R0ex/zk8uf8gIMz/FRDe/xEMzv8jIJz/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAP8AAAD/SqOR/yImvP8sLKj/AAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAD/AAAA/wAAAP8AAAD/BvAB/3Sqm/9KW5r/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAAAAAAAAAAAAAAAAAAABvAB/wbwAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/BvAB/wbwAf8G8AH/AAAAAAAAAAAAAAAAAAAAAAAAAAAG8AH/AAAAAAAAAP8G8AH/AAAAAAAAAAAAAAAAAAAA/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAP8G8AH/BvAB/wbwAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BvAB/wbwAf8AAAAAAAAA/wAAAP8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/AAAAAAAAAAAG8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wbwAf8G8AH/BvAB/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOesQQBjrEGAAaxBwACsQcABrEHDg6xBwAesQcAPrEHAD6xBw8+sQcPprEHD8axBwAGsQQABrEGAAaxB//+sQQ=="},  
   { separator: ''},
   { label: "Сохранить ярлык страницы как…", func: "saveShortcuts()", image: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/BP8k/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/BP8k/wT/JP8E/yT/BP8k/5XLDv/zqgD/86oA//I1///yNf//86oA//OqAP/zqgD/86oA//OqAP+Vyw7/lcsO/wT/JP8E/yT/BP8k/5XLDv+Vyw7/86oA//OqAP/yNf//8jX///OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA//02AP/9NgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP/9NgD//TYA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/wT/JP+Vyw7/86oA//OqAP/zqgD/86oA/wA31v8AN9b/86oA//9If///SH//86oA//OqAP/zqgD/86oA/5XLDv8E/yT/lcsO//OqAP/zqgD/86oA//OqAP8AN9b/ADfW//OqAP//SH///0h///OqAP/zqgD/86oA//OqAP+Vyw7/BP8k/5XLDv/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/lcsO/5XLDv+Vyw7/86oA//OqAP/zqgD/86oA/0CA//9AgP//86oA/07+9f9O/vX/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP9AgP//QID///OqAP9O/vX/Tv71//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/86oA//OqAP/zqgD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ=="},
   { separator: ''},  
   { label: "Кодировать изображение(текст.файл) в base64", func: "copyFaviconbase()", image: "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AIAQ/wCAEf8AgA//AIAR/wCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AgBX/AIAVAAAAAAAAAAD/AIAo/wCA//8AgP//AID//wCA//8AgP//AIAoAAAAAAAAAAAAAAAAAAAAAP8AgBL/AID//wCA//8AgA3/AIAL/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgBAAAAAAAAAAAAAAAAD/AIAR/wCA//8AgP//AIAK/wCACv8AgP//AID//wCAIf8AgAX/AIAh/wCA//8AgP//AIAQAAAAAAAAAAAAAAAA/wCACv8AgP//AID//wCAB/8AgAf/AID//wCA//8AgAUAAAAA/wCABf8AgP//AID//wCACgAAAAD/AIAQ/wCADP8AgCH/AID//wCA//8AgAf/AIAH/wCA//8AgP//AIAh/wCABf8AgCH/AID//wCA//8AgAv/AIAh/wCA//8AgP//AID//wCA//8AgP//AIAH/wCAB/8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AIAg/wCA//8AgP//AID//wCA//8AgP//AID//wCAB/8AgAf/AID//wCA//8AgP//AID//wCA//8AgP//AIAh/wCAC/8AgP//AID//wCAHP8AgBz/AID//wCA//8AgAf/AIAH/wCA//8AgP//AIAh/wCACf8AgA7/AIAMAAAAAP8AgAj/AID//wCA//8AgAP/AIAD/wCA//8AgP//AIAH/wCAB/8AgP//AID//wCABQAAAAAAAAAA/wCADf8AgAr/AIAL/wCA//8AgP//AIAH/wCAB/8AgP//AID//wCAB/8AgAr/AID//wCA//8AgCH/AIAH/wCAJf8AgP//AID//wCAI/8AgP//AID//wCAB/8AgAf/AID//wCA//8AgAf/AIAL/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgCT/AID//wCA//8AgAr/AIAK/wCA//8AgP//AIAKAAAAAP8AgCj/AID//wCA//8AgP//AID//wCA//8AgCP/AIAM/wCA//8AgP//AIAN/wCADf8AgP//AID//wCADQAAAAAAAAAA/wCAEP8AgBH/AIAP/wCAEf8AgBAAAAAAAAAAAP8AgBT/AIAVAAAAAAAAAAD/AIAV/wCAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQcH5rEGA8KxBAHCsQQBwrEEIQKxBAACsQQAArEEAAKxBAQCsQQwArEEAAKxBAACsQYAArEHBmaxB//+sQQ=="},
   { separator: ''},
   { label: "Сохранить всю страницу как PDF", func: "savePageToPDF()", image: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYUw4pJt3V/+Rb1D8lnFP/55zTf+VcVH/lXJS/5VyUv+VclL/lXJS/5VyUv+VclL/k3BR/J56Wv9cRzSkAAAAAJNvUKTto2L/4ppe/uehZf/Pmmr/noZv/9Scav/Wl17/1plh/9eZYf/XmWH/15lh/9eZYf/WmGD/2Jlg/suRXP9mRiuk8rWA/397dP1akKn/rqqi/3LF3f8Mntj/4dLJ///+9f/48u3/9e7n//bt5v/47+f/+O/n//jv5//rvZP/1ZJX/a9/VP9+lrD8AIvz/xOt+f8Douv/ALb6/wC28/9tmar/z8jJ//Lq5/////7//v////n9///6/P3//////+Ta0P/PjVP/pnpT/IWds/+aiXj/5efl/8Px//951/3/LMz//wCx8/8GltL/NIu3/4ycqf/l29L////+//n6+//8/v//3tXM/8+OVP+oe1P/6K57/86QWP/r6Ob////////++v/r9/z/oOb9/zDL//8Arf//AI/r/ydysv+hpqr//PTr///////d1Mz/0I5U/6h7U//osH//wo5g/+fm5P/7/f//9vf5//z7+////vv/9/r8/5Dc/P8Oqv7/AJf//wF02v9ffZ7/8Ojh/+Ha1P/NjFL/qHtT/+ewf//Ej1//7O3r///////+/v7//v7+//f5+v/6+vv////8/8Tq/f8hp/7/AJH//wB18/8/bqj/1MGu/9mXXv+leVH/569+/8iSYv+/tKn/wLew/8O5sf/P0M////////7+/v/3+fv////7/9Hv/v8hoP3/AIn//wB4/v84ZqL/w4NH/619VP/nsYD/x45c/9W5of/bv6j/0Jxt/6J/YP+spqD/2N3i//7////6+/3///76/8vr/v8Slv7/AIb+/wBz//83VH7/nW1B/+ewfv/Fjl7/7Ozr///////9+/r/9d7K/9Ghdv+jd1D/pJ6Y/+jt8f/9///////7/6fb/v8Ahv7/AYD//wRp6f95YlT/57B//8SOXv/n5uT//v7///r7/P/8/v////////XRsv/DhEv/loBu/9DX3P/9/v/////7/2O6/f8Afv//FnTU/5JtTf/nsH//xY9e/+jn5f/+/f//+fj5//n4+P/5+Pn/+/////Xbxf/Wj1D/nX1h/+Ll6P////7/3+/3/w+V//8tcbP/qHJB/+WuffzCjV7/5efn///////+/v7//////////////v7///////XRsP/TnW3/8fT3//////////z/ddD//0Nxl/+zdkH88LmH/9CRWP2+qJT/0M7N/8/Jxv/Pysf/z8rH/8/Kxv/Py8n/zsO6/7+pmP/PzMv/zsnG/9bNyP+nsK7/h4R3/b2BT/+Sb1Ck7qxw/9GSW/69hlb/wYhX/8CIV//AiFf/wIhX/8CIVv/BiVj/xI1d/8CIVv/BiFf/vYZW/9STW/7ppmv/bE80pAAAAACUd16k+sui/+7AmPzwwpr/8MKa//DCmv/wwpr/8MKa//DCmf/vwZj/8MKa//DCmv/uwJj8+cui/5N3XaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},

   { label: "Сохранить всю страницу как HTM", func: "savePage()", image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAB5UlEQVQokY2Sz0tUURiGv1rUrkUb3UVBRbSq/oG20aqlTIsR0SSDiMh+CDK4mKhgTKgwaoYRx4awRU6EBTJDEKkz6pSOlSkzajCBWDg26HXuPedpce/VuaDS2Z33e5/3vOdwBGdZSmOa66AVoG1Rm85UAwrTXMNUykWQrSFQKaCNgq2sfsLKHEavJO29sYjemKPaL25KfHyWnpFxzMINANRiiEpCUPkO2z7fyovRUXozs1snuzVu9g8hFx8xPHwbZs5hlaexvvuwylPw4wJfMtcRfzdXYoMAmEohStsVfpXK7Gnpoi4yANlDbKRPon+/xhg7AxM1XOobQJo7WfhTsptpbde2lB3Q1DeIXA6Tn7wFHwQjuQ9SQjF3jb1Xo/giCar94qYA5IpLSEOIO69ewuda/iYFsge5m4gj9SHGFopU+zcfzBXOP+7nQGuMlekGSAprX33UtsU5G4p7fB7YrZKamUf8nTx5F4Wp/fQMPUP8D3mbm/P4PDCAG3oqGONYIAzL9zgdjHA8EGW75YHd1Fj6G9J4n7Y3I0jTA55+nHTmamfYLbRuWpzoiCL1QY60P2fVqHjm28LA5t/tSk0gdQGC79MefVdYOxcvlsocbQ+TXy559F3h6pDszyXP6/4/7ATsjMI/jSFZQARyBXYAAAAASUVORK5CYII="},


   { label: "Сохранить выделенный текст как txt файл", func: "saveSelectionToTxt()", image: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAQE6AAAAZAAAAGgAAAJmAAACZgAAAGYAAABmAAAAZgAAAGYAAABmAAAAZgAAAGYAAABlAAAAaQABAmYAAQEjAAAAADlVkOdVcKHxVXKi8kdklPJLZpfyU3Cg8lJvn/JRbZ7yUW+g8lFun/JRbp/yUG6e8lVyofFVdKjzLkV45wAAAFABAQEAaIzF/3y34v9wsuL/cJe0/0lpgv9bjLP/dLLh/2+v3v9sq9v/cK3d/3Gv3v9sqtv/b7Df/4G77P9VcqT2AAAAVAMDAQBnir/+ZqfU/pDB4/7a3uD+j46N/kxYXv6To6/+1er4/tXp+P7J3/D+1ej4/svg8v6Gut/9aqzd/lhxnvAAAABSAwIBAGaIvv9pptX/ocfj//f4/P/P0tX/g4CA/1xZWf+Woqr/2uz8/9Hl+f/W5fT/2Of3/5fC4v5tq93/Vm+e8QAAAFIDAgEAaYm+/3mw2/+iyeX/9Pn8/+z0+//IzNL/d3h5/0tMTv+Mkpn/xdvs/9Hp/f/O4PL/msXk/nmz4/9XcJ/xAAAAUgMDAQBti7//k7/h/6fL5v/v9fn/4u73/9Dk9P+8wMT/YGpx/zJJWv94iJf/ztzo/9Pp/P+ZwuD+gLfk/1dwnvEAAABSAwMBAHOPwf+myub/sNHp//j7/P/6/P3/8fr///r39P+sxdP/IXWq/xJJcv+NjZD/0+Lu/6TN7f6Ft+L/WXGf8QAAAFIDAwEAd5LD/7PR6/+ZxOP/0ePx/97r9f/Y5/L/3e32/8Tc7f9gseT/CHK3/zBYdv+HiY7/lL/f/pLE7/9bcJ3xAAAAUgMDAQB4k8P/xNvx/5/F5f+kyOX/qMrn/6TH5f+kyOX/sM/q/5e51P9Mm83/GHm3/xxIav9fdYf+pMvs/1x1pfIAAABTAwMBAHmSxf/O4/T/y9/y/8Hb9P/C3PX/wNv0/7vW7/+93ff/utDm/42fsf9Gjbn/EXS2/ytSbv6Fj5r/WnGc8gAAAFICAwEBepPE/tHk9f/S5PX/vMjV/7fCzP+3w8//uMPP/7XBzP+6ytf/qa+4/3h/hv9Ghaz/JoO+/jNXdP82PVnyAAAAVgACAgCBmcb/2+r3/dHh8fyPkpX/kI6N/5yam/+dnJ3/paWk/6enpf+sr6//mpSR/3Bubf9SjbD8H4C+/QsrSvcCAAB/AAAAA3yVx//j8///3u/7/52gpf6pqKf+uLm5/rq7u/7Ly8v+ycnI/paWlf6LjY/+np2f/Xh+g/5gnL7/MX+y/xcgJ80BAgNNN1OUs6W84fDA1O73mJyj/ainpv+2trb/t7e4/8fHyP/Fxsb/kZGQ/4eGhP+vucT/j6G+/W53k/NlkbnwNoOv/AgiNb8CCBsQDRo/YwsaO3B0d33arKyp9q2trfWvr6/2u7u79ru7vPawr7H1sbCt9nJ2gOQIGD6bFCFEYB0qPE1Bf6SpEz9cggAAAAMCAQEBAQAAADIyMmlDQ0ONQUFBhUFBQYVCQkGFQkJBhUhISIRNTU2OKysrZAEAAAUBAQAAAgEAAAkEAAEDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="},
   { separator: ''},
   { label: "Запомнить изображение как base64, в контекстном меню", value: "Save.WebScreenShotOnImage"},
   { label: "Сохранить выделенный текст в файл, в контекстном меню", value: "Save.SelectionToFile" },
   { label: "Открыть выделенный текст в внешнем редакторе, в контекстном меню", value: "Save.TextToEditor"},
];

var menuPopup = self.appendChild(document.createXULElement("menupopup"));
array.forEach((m,i)=> {
   if ("separator" in m) { menuPopup.appendChild(document.createXULElement("menuseparator")); return };
   var mItem = menuPopup.appendChild(document.createXULElement("menuitem"));
   mItem.setAttribute("label", m.label);
   mItem.setAttribute("class", "menuitem-iconic");
   if ("image" in m) mItem.setAttribute("image", m.image || array[i-1].image); 
   if ("value" in m) { 
       mItem.setAttribute('type', 'checkbox');
       mItem.setAttribute('checked', cbu.getPrefs(m.value) );
       mItem.onclick =()=> cbu.setPrefs(m.value, !cbu.getPrefs(m.value));
       }
   if ("func" in m) mItem.addEventListener("command", ()=> eval(m.func.toString()));
});
menuPopup.setAttribute("onclick", "event.stopPropagation()");


function aDate() {
 var t=new Date();
 var y=1900+t.getYear();
 var min=t.getMinutes(); if (min<10){min="0"+min};
 var h=t.getHours();
 var m=t.getMonth();switch(m){case 0: m="января";break;case 1: m="февраля";break;case 2: m="марта";break;case 3: m="апреля";break;case 4: m="мая";break;case 5: m="июня";break;case 6: m="июля";break;case 7: m="августа";break;case 8: m="сентября";break;case 9: m="октября";break;case 10: m="ноября";break;default: m="декабря";}
 var d=t.getDate();
 var curdate=d+" "+m+" "+y+" "+"г";
 var myfilename=curdate;
 return myfilename;
}
 

function WebScreenShotonImage(image) {
      var canvas = document.createElementNS(xhtmlns, 'canvas');
      canvas.width = image.naturalWidth;
      canvas.height = image.naturalHeight;
      var ctx = canvas.getContext('2d');
      ctx.drawImage(image, 0, 0);
      var base64 = canvas.toDataURL();
      gClipboard.write(base64);
   
      // стиль для изображение в сплывающей подсказке ....
      var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
      var uri = makeURI('data:text/css,'+ encodeURIComponent('#alertImage { height: 25px !important; width: 25px !important; }'));
      sss.loadAndRegisterSheet(uri, 0);
      
     // alertsService.showAlertNotification(base64, self.label, "Запомнил изображение как base64", false, "", (s, t)=> { 
     Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService).showAlertNotification(base64, self.label, "Запомнил изображение как base64", false, "", (s, t)=> {
         if (t == 'alertfinished')
             sss.unregisterSheet(uri, 0); // удалить стиль когда подсказка закрывается
      }, "");
};


var saveToFile = function (fileContent, fileName) {
    var uc = Components.classes['@mozilla.org/intl/scriptableunicodeconverter'].createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
    uc.charset = 'utf-8';
    fileContent = uc.ConvertFromUnicode(fileContent);

    var nsIFilePicker = Components.interfaces.nsIFilePicker;
    var fp = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
    fp.init(window, '', fp.modeSave);
    fp.defaultString = fileName;
    fp.appendFilters(fp.filterHTML);
    fp.appendFilters(fp.filterAll);
    fp.open(function (rv) {
  if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
    var stream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream);
    stream.init(fp.file, 0x02|0x20|0x08, 0666, 0);
    stream.write(fileContent, fileContent.length);
    stream.close();
  }
});
};


function savePage() {

var vert=`javascript:(function(){var getSelWin=function(w){if(w.getSelection().toString())return w;for(var i=0,f,r;f=w.frames[i];i++){try{if(r=getSelWin(f))return r}catch(e){}}};var selWin=getSelWin(window),win=selWin||window,doc=win.document,loc=win.location;var qualifyURL=function(url,base){if(!url||/^([a-z]+:|%23)/.test(url))return url;var a=doc.createElement('a');if(base){a.href=base;a.href=a.protocol+(url.charAt(0)=='/'%3F(url.charAt(1)=='/'%3F'':'//'+a.host):'//'+a.host+a.pathname.slice(0,(url.charAt(0)!='%3F'&&a.pathname.lastIndexOf('/')+1)||a.pathname.length))+url}else{a.href=url};return a.href};var encodeImg=function(src,obj){var canvas,img,ret=src;if(/^https%3F:%5C/%5C//.test(src)){canvas=doc.createElement('canvas');if(!obj||obj.nodeName.toLowerCase()!='img'){img=doc.createElement('img');img.src=src}else{img=obj};if(img.complete)try{canvas.width=img.width;canvas.height=img.height;canvas.getContext('2d').drawImage(img,0,0);ret=canvas.toDataURL((/%5C.jpe%3Fg/i.test(src)%3F'image/jpeg':'image/png'))}catch(e){};if(img!=obj)img.src='about:blank'};return ret};var toSrc=function(obj){var strToSrc=function(str){var chr,ret='',i=0,meta={'%5Cb':'%5C%5Cb','%5Ct':'%5C%5Ct','%5Cn':'%5C%5Cn','%5Cf':'%5C%5Cf','%5Cr':'%5C%5Cr','%5Cx22':'%5C%5C%5Cx22','%5C%5C':'%5C%5C%5C%5C'};while(chr=str.charAt(i++)){ret+=meta[chr]||chr};return'%5Cx22'+ret+'%5Cx22'},arrToSrc=function(arr){var ret=[];for(var i=0;i<arr.length;i++){ret[i]=toSrc(arr[i])||'null'};return'['+ret.join(',')+']'},objToSrc=function(obj){var val,ret=[];for(var prop in obj){if(Object.prototype.hasOwnProperty.call(obj,prop)&&(val=toSrc(obj[prop])))ret.push(strToSrc(prop)+': '+val)};return'{'+ret.join(',')+'}'};switch(Object.prototype.toString.call(obj).slice(8,-1)){case'Array':return arrToSrc(obj);case'Boolean':case'Function':case'RegExp':return obj.toString();case'Date':return'new Date('+obj.getTime()+')';case'Math':return'Math';case'Number':return isFinite(obj)%3FString(obj):'null';case'Object':return objToSrc(obj);case'String':return strToSrc(obj);default:return obj%3F(obj.nodeType==1&&obj.id%3F'document.getElementById('+strToSrc(obj.id)+')':'{}'):'null'}};var ele,pEle,clone,reUrl=/(url%5C(%5Cx22%3F)(.+%3F)(%5Cx22%3F%5C))/g;if(selWin){var rng=win.getSelection().getRangeAt(0);pEle=rng.commonAncestorContainer;ele=rng.cloneContents()}else{pEle=doc.documentElement;ele=(doc.body||doc.getElementsByTagName('body')[0]).cloneNode(true)};while(pEle){if(pEle.nodeType==1){clone=pEle.cloneNode(false);clone.appendChild(ele);ele=clone};pEle=pEle.parentNode};var sel=doc.createElement('div');sel.appendChild(ele);for(var el,all=sel.getElementsByTagName('*'),i=all.length;i--;){el=all[i];if(el.style&&el.style.backgroundImage)el.style.backgroundImage=el.style.backgroundImage.replace(reUrl,function(a,b,c,d){return b+encodeImg(qualifyURL(c))+d});switch(el.nodeName.toLowerCase()){case'link':case'style':case'script':el.parentNode.removeChild(el);break;case'a':case'area':if(el.hasAttribute('href')&&el.getAttribute('href').charAt(0)!='%23')el.href=el.href;break;case'img':case'input':if(el.hasAttribute('src'))el.src=encodeImg(el.src,el);break;case'audio':case'video':case'embed':case'frame':case'iframe':if(el.hasAttribute('src'))el.src=el.src;break;case'object':if(el.hasAttribute('data'))el.data=el.data;break;case'form':if(el.hasAttribute('action'))el.action=el.action;break}};var head=ele.insertBefore(doc.createElement('head'),ele.firstChild);var meta=doc.createElement('meta');meta.httpEquiv='content-type';meta.content='text/html; charset=utf-8';head.appendChild(meta);var title=doc.getElementsByTagName('title')[0];if(title)head.appendChild(title.cloneNode(true));head.copyScript=function(){if('$'in win)return;var f=doc.createElement('iframe');f.src='about:blank';f.setAttribute('style','position:fixed;left:0;top:0;visibility:hidden;width:0;height:0;');doc.documentElement.appendChild(f);var str,script=doc.createElement('script');script.type='text/javascript';for(var name in win){if(name in f.contentWindow||!/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name))continue;try{str=toSrc(win[name]);if(!/%5C{%5Cs*%5C[native code%5C]%5Cs*%5C}/.test(str)){script.appendChild(doc.createTextNode('var '+name+' = '+str.replace(/<%5C/(script>)/ig,'<%5C%5C/$1')+';%5Cn'))}}catch(e){}};f.parentNode.removeChild(f);if(script.childNodes.length)this.nextSibling.appendChild(script)};head.copyScript();head.copyStyle=function(s){if(!s)return;var style=doc.createElement('style');style.type='text/css';if(s.media&&s.media.mediaText)style.media=s.media.mediaText;try{for(var i=0,rule;rule=s.cssRules[i];i++){if(rule.type!=3){if((!rule.selectorText||rule.selectorText.indexOf(':')!=-1)||(!sel.querySelector||sel.querySelector(rule.selectorText))){style.appendChild(doc.createTextNode(rule.cssText.replace(reUrl,function(a,b,c,d){var url=qualifyURL(c,s.href);if(rule.type==1&&rule.style&&rule.style.backgroundImage)url=encodeImg(url);return b+url+d})+'%5Cn'))}}else{this.copyStyle(rule.styleSheet)}}}catch(e){if(s.ownerNode)style=s.ownerNode.cloneNode(false)};this.appendChild(style)};var sheets=doc.styleSheets;for(var j=0;j<sheets.length;j++)head.copyStyle(sheets[j]);head.appendChild(doc.createTextNode('%5Cn'));var doctype='',dt=doc.doctype;if(dt&&dt.name){doctype+='<!DOCTYPE '+dt.name;if(dt.publicId)doctype+=' PUBLIC %5Cx22'+dt.publicId+'%5Cx22';if(dt.systemId)doctype+=' %5Cx22'+dt.systemId+'%5Cx22';doctype+='>%5Cn'};var href = 'data:text/html;charset=utf-8,' + encodeURIComponent(doctype + sel.innerHTML + '\n<!-- This document saved from ' + (loc.protocol != 'data:' ? loc.href : 'data:uri') + ' -->');var a = document.documentElement.appendChild(document.createElement("a"));a.setAttribute("href", href);var name = selWin ? win.getSelection().toString() : (title && title.text ? title.text : loc.pathname.split('/').pop());name=name.replace(/[:\\\/<>?*|"]+/g, '_').replace(/\s+/g, ' ').slice(0, 100).replace(/^\s+|\s+$/g, '');name += (function () {var d = new Date(), z=function(n){return '_' + (n < 10 ? '0' : '') + n};return z(d.getHours()) + z(d.getMinutes()) + z(d.getSeconds());})();a.setAttribute("download", name + ".html");a.click();a.remove();})();`;
gBrowser. loadURI(vert, {triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()});

};

function savePage() {
 saveBrowser(gBrowser.selectedBrowser);
};

function saveShortcuts() {
var file = Components.classes["@mozilla.org/file/local;1"].
           createInstance(Components.interfaces.nsIFile);
file.initWithPath(folderpath);

if( !file.exists() || !file.isDirectory() ) {   file.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0x1B6);}

var savetodir=folderpath+"\\"; 
var urllink=gBrowser.currentURI.spec;
var out=getTabLabel();
var filename=savetodir+out+'.url';
var data="[InternetShortcut]\r\nURL="+urllink+"\r\n";
saveToFile(data, filename);
 // стиль для изображение в сплывающей подсказке ....
      var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
      var uri = makeURI('data:text/css,'+ encodeURIComponent('#alertImage { height: 25px !important; width: 25px !important; }'));
      sss.loadAndRegisterSheet(uri, 0);
   // подсказка
   var notific = 'Сохранил в: ' + folderpath;
   var image = gBrowser.selectedBrowser.mIconURL;
   Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService).showAlertNotification(image, filename, notific);
};

// Кодировать изображение или текстовой файл в base64 .............
function copyFaviconbase(){
var fp = window.makeFilePicker();
fp.init(window, "Открыть файл", fp.modeOpen);
fp.appendFilter("Text and images", "*.txt; *.text; *.css; *.js; *.ini; *.rdf; *.xml; *.html; *.htm; *.shtml; *.xhtml; *.jpe; *.jpg; *.jpeg;\
                                    *.gif; *.png; *.bmp; *.ico; *.svg; *.svgz; *.tif; *.tiff; *.ai; *.drw; *.pct; *.psp; *.xcf; *.psd; *.raw");
  fp.open(re=> { 
  if ( re != fp.returnOK ) return;
   var file = fp.file;
   var inputStream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
   inputStream.init(file, 0x01, 0600, 0);
   var stream = Cc["@mozilla.org/binaryinputstream;1"].createInstance(Ci.nsIBinaryInputStream);
   stream.setInputStream(inputStream);
   var encoded = btoa(stream.readBytes(stream.available()));
   var contentType = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService).getTypeFromFile(file);
   var dataURI = "data:" + contentType + ";charset=utf-8;base64," + encoded;
   gClipboard.write(dataURI);
   //Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService).showAlertNotification(dataURI, self.label, "Скопировал файл как base64");
    // стиль для изображение в сплывающей подсказке ....
      var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
      var uri = makeURI('data:text/css,'+ encodeURIComponent('#alertImage { height: 25px !important; width: 25px !important; }'));
      sss.loadAndRegisterSheet(uri, 0);
      
     // alertsService.showAlertNotification(base64, self.label, "Запомнил изображение как base64", false, "", (s, t)=> { 
     Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService).showAlertNotification(dataURI, self.label, "Запомнил изображение как base64", false, "", (s, t)=> {
         if (t == 'alertfinished')
             sss.unregisterSheet(uri, 0); // удалить стиль когда подсказка закрывается
      }, "");
});
};

// Сохранить страницу как PDF файл через сервис 'pdfmyurl.com' .............
function savePageToPDF() {
      var loc = gBrowser.currentURI.spec;
   var vert = "http://pdfmyurl.com?url=" + loc;
  
   gBrowser. loadURI(vert, {
   triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()
   });
}; 

// Сохранить иконку текущего сайта с диалогом сохранения .............
if (typeof window.saveImageURL != "function") var saveImageURL = internalSave.length == 15
	? (url, name, a3, a4, a5, a6, a7, type, a9, priv, prin) =>
		internalSave(url, null, name, a9, type, a4, a3, null, a6, null, a7, a5, null, priv, prin)
	: (url, name, a3, a4, a5, a6, a7, type, a9, priv, prin) =>
		internalSave(url, null, name, a9, type, a4, a3, null, a6, a7, a5, null, priv, prin);
function saveFavicon() {
       var uri = gBrowser.currentURI;
       function getSiteName() {
                  try { var domain = uri.host.split('.') } catch(e) { return "" };
                   domain = (domain.length == 2) ? domain[0] : domain[1]
                   return domain.charAt(0).toUpperCase() + domain.slice(1).split('.')[0] + " ";  
            };
    var url = gBrowser.selectedTab.image;
    url && saveImageURL(
        url, getSiteName(), null, false, false, null, null,
        /^data:(image\/[^;,]+)/i.test(url) ? RegExp.$1.toLowerCase() : Cc["@mozilla.org/mime;1"]
            .getService(Ci.nsIMIMEService).getTypeFromURI(Services.io.newURI(url)),
        null, PrivateBrowsingUtils.isContentWindowPrivate(content || window), document.nodePrincipal
    );
};


// Скопировать иконку текущего сайта как base64 код .............
function copyFaviconData() {
   var img = new Image();
   img.src = gBrowser.selectedTab.image;
   WebScreenShotonImage(img);
};


function saveSelectionToTxt() {
	var splice = saveURL.length == 10;
	var msgName = _id + ":Save:GetSelection";
	var receiver = msg => {
		var args = [
			"data:text/plain," + encodeURIComponent(gBrowser.currentURI.spec + "\r\n\r\n" + msg.data),
			getTabLabel() + '  ' + aDate().replace(/:/g, ".") + ".txt",
			null, false, false, null, window.document
		];
		splice && args.splice(5, 0, null);
		saveURL(...args);
	}
	messageManager.addMessageListener(msgName, receiver);
	addDestructor(() => messageManager.removeMessageListener(msgName, receiver));

	var func = fm => {
		var res, fed, win = {};
		var fe = fm.getFocusedElementForWindow(content, true, win);
		var sel = (win = win.value).getSelection();
		if (sel.isCollapsed) {
			var ed = fe && fe.editor;
			if (ed && ed instanceof Ci.nsIEditor)
				sel = ed.selection, fed = fe;
		}
		if (sel.isCollapsed)
			fed && fed.blur(),
			docShell.doCommand("cmd_selectAll"),
			res = win.getSelection().toString(),
			docShell.doCommand("cmd_selectNone"),
			fed && fed.focus();

		res = res || sel.toString();
		/\S/.test(res) && sendAsyncMessage("NAME", res);
	}
	var url = "data:charset=utf-8," + encodeURIComponent(`(${func})`.replace("NAME", msgName))
		+ '(Cc["@mozilla.org/focus-manager;1"].getService(Ci.nsIFocusManager));';
	(saveSelectionToTxt = () => gBrowser.selectedBrowser.messageManager.loadFrameScript(url, false))();
}


//Добавыть в контекстное меню страницы пункт "Запомнить изображение как base64"..........................................................................................
(popup => addEventListener("popupshowing", {
    handleEvent(e) {
        if (this.shouldHide) return;

        var menuitem = document.createXULElement("menuitem");
        menuitem.id = "content-baseItem";
        menuitem.className = "menuitem-iconic";
        menuitem.setAttribute("oncommand", "copyImageAsBase64()");
        menuitem.setAttribute("label", "Запомнить изображение как base64");
        menuitem.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AIAQ/wCAEf8AgA//AIAR/wCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AgBX/AIAVAAAAAAAAAAD/AIAo/wCA//8AgP//AID//wCA//8AgP//AIAoAAAAAAAAAAAAAAAAAAAAAP8AgBL/AID//wCA//8AgA3/AIAL/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgBAAAAAAAAAAAAAAAAD/AIAR/wCA//8AgP//AIAK/wCACv8AgP//AID//wCAIf8AgAX/AIAh/wCA//8AgP//AIAQAAAAAAAAAAAAAAAA/wCACv8AgP//AID//wCAB/8AgAf/AID//wCA//8AgAUAAAAA/wCABf8AgP//AID//wCACgAAAAD/AIAQ/wCADP8AgCH/AID//wCA//8AgAf/AIAH/wCA//8AgP//AIAh/wCABf8AgCH/AID//wCA//8AgAv/AIAh/wCA//8AgP//AID//wCA//8AgP//AIAH/wCAB/8AgP//AID//wCA//8AgP//AID//wCA//8AgP//AIAg/wCA//8AgP//AID//wCA//8AgP//AID//wCAB/8AgAf/AID//wCA//8AgP//AID//wCA//8AgP//AIAh/wCAC/8AgP//AID//wCAHP8AgBz/AID//wCA//8AgAf/AIAH/wCA//8AgP//AIAh/wCACf8AgA7/AIAMAAAAAP8AgAj/AID//wCA//8AgAP/AIAD/wCA//8AgP//AIAH/wCAB/8AgP//AID//wCABQAAAAAAAAAA/wCADf8AgAr/AIAL/wCA//8AgP//AIAH/wCAB/8AgP//AID//wCAB/8AgAr/AID//wCA//8AgCH/AIAH/wCAJf8AgP//AID//wCAI/8AgP//AID//wCAB/8AgAf/AID//wCA//8AgAf/AIAL/wCA//8AgP//AID//wCA//8AgP//AID//wCA//8AgCT/AID//wCA//8AgAr/AIAK/wCA//8AgP//AIAKAAAAAP8AgCj/AID//wCA//8AgP//AID//wCA//8AgCP/AIAM/wCA//8AgP//AIAN/wCADf8AgP//AID//wCADQAAAAAAAAAA/wCAEP8AgBH/AIAP/wCAEf8AgBAAAAAAAAAAAP8AgBT/AIAVAAAAAAAAAAD/AIAV/wCAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQcH5rEGA8KxBAHCsQQBwrEEIQKxBAACsQQAArEEAAKxBAQCsQQwArEEAAKxBAACsQYAArEHBmaxB//+sQQ==");
        popup.append(menuitem);
        addDestructor(() => menuitem.remove());

        menuitem.copyImageAsBase64 = () => {
            var {osPid} = gContextMenu.actor.manager.browsingContext.currentWindowGlobal;
            if (osPid == -1) osPid = Services.appinfo.processID;
            for(var ind = 0, len = Services.ppmm.childCount; ind < len; ind++) {
                var pmm = Services.ppmm.getChildAt(ind);
                if (pmm.osPid == osPid) break;
            }
            pmm.loadProcessScript("data:;charset=utf-8," + encodeURIComponent(this.code()), false);
        }
        this.handleEvent = () => menuitem.hidden = this.shouldHide;
    },
    get shouldHide() {
        return !gContextMenu.onImage;
    },
    code: () => `(targetIdentifier => {

        var image = ChromeUtils.import("resource://gre/modules/ContentDOMReference.jsm")
            .ContentDOMReference.resolve(targetIdentifier);

        var canvas = image.ownerDocument.createElementNS("${xhtmlns}", "canvas");
        canvas.width = image.naturalWidth;
        canvas.height = image.naturalHeight;
        var ctx = canvas.getContext("2d");
        ctx.drawImage(image, 0, 0);
        var base64 = canvas.toDataURL();

        Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper)
            .copyStringToClipboard(base64, Ci.nsIClipboard.kGlobalClipboard);

        Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
            .showAlertNotification(base64, "${self.label}", "Запомнил изображение как base64");
    })(${
        JSON.stringify(gContextMenu.targetIdentifier)
    })`
}, false, popup || 1))(document.getElementById("contentAreaContextMenu"));


// Добавляем в контекстного меню страницы новые пункты .............
((contextMenu, el)=> {

   // в контекстного меню выделенного текста ....
   var saveItem = contextMenu.insertBefore(document.createXULElement("menuitem"), el);
   saveItem.id = "content-saveItem";
   saveItem.setAttribute("label", "Сохранить выделенный текст в файл");
   saveItem.setAttribute("class", "menuitem-iconic");
   saveItem.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAADAgBEDRIXnwxQjKQNWp6pDFWXqAxXm6gMV5moDFeaqAxXmqgMV5qoDFebqAxVlqgNW5+pCkyIogwSFqgDAgBHDQoFhyszOv8hheP+IJH7/x+L8v8fjfb/H433/x+N9v8fjfb/H432/x+N9/8fi/L/IJH7/yGF5P0kLTTvDAcDgwgICIQ8Ojf/0czA+Oji1fzh18r85NzO/OTbz/zj287849vO/OPbzvzk3M/84dfK++ji1f3Sy8D5NDIvywYGB3kKCgqFQ0A8/+XXw/v979f/9uTO//rp0f/66NH/+ujR//rn0f/66NH/+ujR//bkzv/979f/5tfD/UZBPv8KCwqEDQwMhUVDQP/f08X7+OrZ/+zf0P/v5NP/8OPT/+/j0//v4tP/8OPT/+/j0//s39D/+OrZ/+DTxfxEQj//DAwMhA8PD4VKR0T/4dXG+/rr2v/v4tH/9OXU//Ll1P/z5dT/8+XU//Pl1P/05NT/7+DR//rr2v/i1cX7SkhE/w8PD4USEhKFT0xI/+XXxfv97tr/9ePR//no1P/459T/+OfU//jn1P/459T/+OfU//Xk0f/97tr/5dfF+09MSf8SEhGFFRQUhVNQTv/j2cv7+u/g//Hm2P/169v/9Orb//Tq2//06tv/9erb//br3P/x5tf/+e/g/+PZzPtTUU7/FBQUhRgXF4VXU1D/2828+/Lk0f/q2sf/7d3K/+3dyv/t3cr/7N3K/+rayP/r28n/69vI//Ll0v/azbv7VlNP/xgXF4UfHh6FTktJ/1JOTPtZVFL/Uk5L/1FNSv9RTUr/UU1K/1JPTP9YVVD/VVJP/09NSv9WUk//UU1L+05LSf8fHh2FIR8fhVVTUP9FQkD7UlBM/6Wlj/+4uJ7/sLCX/7S0mv+xsJn/oKCQ/6+vmv+hoYv/TEtH/0NCQPtVUk//IR8fhSMhIIVcWVb/SEVF+19dVv/f3sP////e//X10v///93/2di8/1lYWP+eno//5+fG/19dV/9JRkb7W1hV/yMhIYUkJCOFXltZ/0tJSPtdW1f/0NC4/+/u1P/h4cj/8PDV/7++q/8vLC7/e3lw/9fWv/9eXVf/TElJ+15bWf8lJCKEJSQjhF9cWf9LSUf5XVtX/tbVwf/5+OL/6enV//j54v/GxrX/QD0+/42Kgv/d3cr/YF5a/k5LSvlhXlv/JSUjhCkoKIZpZWT/VVJR/WNhXP/V1cT//f3s/+3t3v/8/Or/zc2//01LSf+VlIz/4eDS/2hmYv9YVVT8aWVj/ycmJoIaGRlYSEVE1DYzM8NKSUfP0dHG9/X16P/n59v+7e3g/+jo3f/X2M3+6uve/9bWzPdOTUvNOjg3y0RBQLwPDw8lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="); 
    saveItem.onclick =()=> saveSelectionToTxt();

   var editorItem = contextMenu.insertBefore(document.createXULElement("menuitem"), el);
   editorItem.id = "content-editorItem";
   editorItem.setAttribute("label", "Открыть выделенный текст в внешнем редакторе");
   editorItem.setAttribute("class", "menuitem-iconic");
   editorItem.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAA////AIiafwC85K4AS1ZGANLsyABKU0UAy+m+AL/lsQC14aQAn9WMAJ/QjQCsrKwAqNyXAOPz3ADe8dcA2e/QANPtyQDM68EAxei4AL7lrwC14aUArt6dAJfOhACdz4sAgICAALThpQDg8doA3vHVANjuzgDR7MYAyum+AMLmtQC7460AsuCjAK3dmgCUy4AArdedANDsxQDL6sAAz+PIAMviwwDH4L4Awd62ALvbrwC02KcArdafAKbTlgCEu3EAtNWoANPqywDa8NIA1u7NANHtxwDK6cAAw+e3ALzkrwC14aYAr9+dAKXbkQCJwnMA1+3QAKncmADd8dQAyuLBAMbgvAC6264AttmoAK/XoACn1JYAotKPAJbNgwB9tWgA4+zfANju0ADT7coAz+vFAMPntgC95K8Art6eAKndlQCa1IYAi8R3AP3+/QDD37kAvt2yALjarACz2KYArdaeAKHRjwCXzoUAj8V6AI6/ewDu8e4Awea2AMrqwQDG6LoAweazALnjqwCz4KQAr9+cAKbbkwCd2IkAlc1/AKbTlQC73K8At9qqALDXowCp1ZsApdOVAKDRjQCYzoUAksx7AIi+cwCu0aEAp9yUAMXougDC5rYAveSuALfipwCw4J8AqdyXAKLajwCd2IcAlNR9AI3FdwDU6ssAqdWZAKPSkgCe0YsAmc6GAJDLfQB/tmoA3enZAJfWhACc2IkApNuRAKTbkACj2pAAodqOAKHZjgCl25IAotmOAIzHdgAPAAAA2JIKAAAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOzARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcrkUA9CUMAAAAAAAAAAAAAAAAAAAAAAAAAA8AAQAAAAEAAAAAAAAAVCIMAAAAAAABAAAAuwP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAACZDSMAAQAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAABAEAABHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGRkZGRkZGRkZAAAAAAAZAQEBAQEBAQEBARkAAIeHiImKi4yNjY5+AQEZAD4mJlZXRH+AgYKDhIVdGQBzJnR1dnd4eXp7fH1+ARkAGiYnaWprbG1ub3Bxcl0ZACdeJl9gYWJjZGVmZ2gBGQAAAyZUVVZXWEVZWltcXRkAAA1KS0wfTU45T1BRUlMZAAA+P0BBK0JDREVGR0hJGQAAAzIzNDU2Nzg5Ojs8PRkAACYnKCkqKywtLi8YMDEZAAAAGhscHR4fICEiIyQlGQAAAA0ODxAREhMUFRYXGBkAAAADBAUGBwYIBgkGChkAAAAAAAACAAIAAgACAAIAAPgBAADwAAAAwAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAAAwAAAAOAAAADgAAAA4AEAAPqrAAA="); 
   editorItem.onclick =()=> textToEditor();


    // устанавливаем где и при каких настройках показывать новые пункты ....
   addEventListener('popupshowing', e=> {
      if (e.target != e.currentTarget) return;
      var sel = gContextMenu.isTextSelected;
      saveItem.hidden = !sel || !cbu.getPrefs("Save.SelectionToFile");
      editorItem.hidden = !sel || !cbu.getPrefs("Save.TextToEditor"); 
      }, false, contextMenu);

   // удалять новые пункти при изминениях ....
   addDestructor(()=> {
      saveItem.remove(); editorItem.remove();
   });   
})(document.getElementById("contentAreaContextMenu"), document.getElementById("context-sep-open"));


// Сохранить выделенный текст в файл на рабочем столе .............
function saveSelectionToFile() {

 let browserMM = gBrowser.selectedBrowser.messageManager;
 browserMM.addMessageListener('getSelect', function listener(message) {
   // создать текст для записи
   var url = gBrowser.currentURI.spec;
   if (/\.рф/.test(url.host)) url = convertFromUnicode("UTF-8", url);
   
   var time = convertFromUnicode("UTF-8", aDate().replace(/:/g, "."));
   var text = convertFromUnicode("UTF-8", message.data); 
   var title = convertFromUnicode("UTF-8", getTabLabel());
   
   var text = "..............................................................\n"
            + title + " - " + time + "\n" + url + "\n\n" + text + "\n\n\n";
   var text = text.replace(/\u000A/g, "\u000D\u000A").replace(/\u000D\u000D\u000A/g, "\u000D\u000A");

   // путь к файлу и название файла
   var file = Services.dirsvc.get("Desk", Ci.nsIFile); 
   file.append("Save - " + (aDate().replace(/:/g, ".")) + ".txt");
          
   // создать файл с текстом или добавлять текст в файл
   var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
   file.exists() ? foStream.init(file, 0x02 | 0x10, 0664, 0) : foStream.init(file, 0x02|0x08|0x20, 0666, 0);
   foStream.write(text, text.length);
   foStream.close();
    // всплывающая подсказка дает возможность открыть файл если кликнуть на подсказке
       var notificat = 'Сохранил выделенный текст в файл на рабочий стол'; 
   var image = gBrowser.selectedTab.image || self.image;
   Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
    .showAlertNotification(image, notificat, "Кликни чтобы открыть файл", true, "", (s, t)=> { 
      if (t == 'alertclickcallback') file.launch();
   }, "");
 browserMM.removeMessageListener('getSelect', listener, true);
});
        browserMM.loadFrameScript('data:,sendAsyncMessage("getSelect", content.document.getSelection().toString())', false);

};

// Создать текстовой файл с выделенным текстом в папке профиля и открыть в редакторе .............
function textToEditor() {


 let browserMM = gBrowser.selectedBrowser.messageManager;
 browserMM.addMessageListener('getSelect', function listener(message) {
   // создать текст для записи
    var text = convertFromUnicode("UTF-8", message.data); 
    var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
   file.append("TextToEditor.txt");
   custombuttonsUtils.writeFile(file.path, text);
   file.launch(); 
          

 browserMM.removeMessageListener('getSelect', listener, true);
});
        browserMM.loadFrameScript('data:,sendAsyncMessage("getSelect", content.document.getSelection().toString())', false);
};


// Конвертировать текст в юникод .............
function convertFromUnicode(charset, str) {
     var converter = Cc['@mozilla.org/intl/scriptableunicodeconverter'].createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
     converter.charset = charset;
     str = converter.ConvertFromUnicode(str);
     return str + converter.Finish();
 
};

// Получить название вкладки без не сохраняемых символов и лишних пробелов ..............
function getTabLabel() { 
   var label = gBrowser.selectedTab.label;      
   var label = label.replace(/[:+.\\\/<>?*|"]+/g, " ").replace(/\s\s+/g, " ");
   return label.substring(0, 50);
};
 ((main, parts) => this.onmousedown = e => {
    if (e.button) return;
    this.onmousedown = null;

    var df = MozXULElement.parseXULToFragment(`
        <menugroup orient="vertical">
            <menuseparator/>
            <menuitem class="menuitem-iconic"
                image="data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAiAcFBa4KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwsJCaECAQE/BQMDAAAAAJUgICD4V1ZW/2FhYf5hYWH/YmFh/2BgYP9fX1//X19f/19fX/9gYGD/YmFh/2FhYf9gYGD+ZmVl/1RSUuIVFBQtCgkJy1paWv+Li4v9h4eH/oiIiP6FhYX+i4uL/pKSkv6Sk5P+kpKS/ouLi/6FhYX+iIiI/oiIiP6Hh4f7lZaW/25tbYQNDQ3OcHBw/5KSkv6Li4v/i4uL/5mZmf+EhIT/ZGRk/1tbWv9kZGT/hISE/5mZmf+Li4v/jY2N/4yMjPyWl5f/iomJjQ4NDc13d3f/m5ub/pWVlf+goKD/XFxc/ygoKP8fHyD/GBsb/yAhIv8pKSn/W1tb/6CgoP+Wlpb/lpaW/J6env+Jh4eMDg4OzX1+fv+ioqL+qqqq/1hYWP8ZGRn/Ghwb/x4dHP8mIh//FhQR/xUWF/8aGhr/WFhY/6urq/+cnJz8pKSk/4qJiYwPDg7Ng4OD/7W1tf6MjIz/Ghoa/xYYGP8uKCb/ZEAo/5xyOP++saL/RD45/xISE/8bGxv/jY2N/6+vr/ypqan/ioiIjA8PD82IiIj/xMTE/l1cXP8LDAz/JiId/1o3LP9ADgD/mGog//Dt6P/VysX/Ih4Z/wsMDf9eXl7/v7+//K6urv+KiYmMEA8PzY+Pj//Kysr+SEhH/wEDBv9MPi7/hlES/3dCAP+VZAn/tJVO/7eVXf9OQTL/AAIE/0pJSf/FxcX8tLS0/4qJiYwQEBDNm5ub/9/e3/5SUlL/AAAA/0M7Mf/aya7/ybiO/5RmEf9aIAD/cjkX/z80KP8AAAD/U1JS/9nZ2fzAwMD/i4qKjBEREc2oqKn/8O/w/oeGhv8AAAD/DAsK/6qkof/17uj/nW8l/14eCf9hPTr/ExUU/wAAAP+Hh4f/6urq/MzMzf+Mi4uMERERzbCwsv/r6uz+3Nzd/yoqKv8AAAD/ExEP/2heU/9yWjv/UD0u/xcXFv8AAAD/Kioq/93d3v/l5eb81NTV/4yLi4wSERHNuLm5/+/v8P7z8/P/xsbG/yAgIP8AAAD/AQEB/wAAAP8BAQH/AAAA/yAgIP/Gxsb/9PT0/+np6vzb29v/jIuLjBIREc2+vb7/+Pj5/uvr7P/7+/v/4ODg/3Nyc/8uLi7/Hh4d/y0sLP9zc3P/4ODg//v7+//s7O3/8/P0/OHg4f+Mi4uLFBMTyMPDw//////7+Pj4/ff29v38/Pz9/////fr6+v3u7u79+vr6/f////38/Pz99/b2/fn5+f37+/v53t7e/5KSko4GBgZ7m5yc//j4+P/w8fH/8fLy//Dw8P/u7u7/8vLy//X19f/y8vL/7u7u//Dw8P/x8vL/8vLy/uXl5f/BwcH+k5GRUAAAAAQeHR1yb25uxn59fcZ9fHzGfXx8xn18fMZ9e3vGfHt7xn17e8Z9fHzGfXx8xn18fMZ9fHzGgH9/xYmIiGVaV1cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
                label="Сохранить всю страницу как PNG"
                value="all"/>
    
            <menuitem class="menuitem-iconic"
                image="data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAiAcFBa4KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwoJCa8KCQmvCgkJrwsJCaECAQE/BQMDAAAAAJUgICD4V1ZW/2FhYf5hYWH/YmFh/2BgYP9fX1//X19f/19fX/9gYGD/YmFh/2FhYf9gYGD+ZmVl/1RSUuIVFBQtCgkJy1paWv+Li4v9h4eH/oiIiP6FhYX+i4uL/pKSkv6Sk5P+kpKS/ouLi/6FhYX+iIiI/oiIiP6Hh4f7lZaW/25tbYQNDQ3OcHBw/5KSkv6Li4v/i4uL/5mZmf+EhIT/ZGRk/1tbWv9kZGT/hISE/5mZmf+Li4v/jY2N/4yMjPyWl5f/iomJjQ4NDc13d3f/m5ub/pWVlf+goKD/XFxc/ygoKP8fHyD/GBsb/yAhIv8pKSn/W1tb/6CgoP+Wlpb/lpaW/J6env+Jh4eMDg4OzX1+fv+ioqL+qqqq/1hYWP8ZGRn/Ghwb/x4dHP8mIh//FhQR/xUWF/8aGhr/WFhY/6urq/+cnJz8pKSk/4qJiYwPDg7Ng4OD/7W1tf6MjIz/Ghoa/xYYGP8uKCb/ZEAo/5xyOP++saL/RD45/xISE/8bGxv/jY2N/6+vr/ypqan/ioiIjA8PD82IiIj/xMTE/l1cXP8LDAz/JiId/1o3LP9ADgD/mGog//Dt6P/VysX/Ih4Z/wsMDf9eXl7/v7+//K6urv+KiYmMEA8PzY+Pj//Kysr+SEhH/wEDBv9MPi7/hlES/3dCAP+VZAn/tJVO/7eVXf9OQTL/AAIE/0pJSf/FxcX8tLS0/4qJiYwQEBDNm5ub/9/e3/5SUlL/AAAA/0M7Mf/aya7/ybiO/5RmEf9aIAD/cjkX/z80KP8AAAD/U1JS/9nZ2fzAwMD/i4qKjBEREc2oqKn/8O/w/oeGhv8AAAD/DAsK/6qkof/17uj/nW8l/14eCf9hPTr/ExUU/wAAAP+Hh4f/6urq/MzMzf+Mi4uMERERzbCwsv/r6uz+3Nzd/yoqKv8AAAD/ExEP/2heU/9yWjv/UD0u/xcXFv8AAAD/Kioq/93d3v/l5eb81NTV/4yLi4wSERHNuLm5/+/v8P7z8/P/xsbG/yAgIP8AAAD/AQEB/wAAAP8BAQH/AAAA/yAgIP/Gxsb/9PT0/+np6vzb29v/jIuLjBIREc2+vb7/+Pj5/uvr7P/7+/v/4ODg/3Nyc/8uLi7/Hh4d/y0sLP9zc3P/4ODg//v7+//s7O3/8/P0/OHg4f+Mi4uLFBMTyMPDw//////7+Pj4/ff29v38/Pz9/////fr6+v3u7u79+vr6/f////38/Pz99/b2/fn5+f37+/v53t7e/5KSko4GBgZ7m5yc//j4+P/w8fH/8fLy//Dw8P/u7u7/8vLy//X19f/y8vL/7u7u//Dw8P/x8vL/8vLy/uXl5f/BwcH+k5GRUAAAAAQeHR1yb25uxn59fcZ9fHzGfXx8xn18fMZ9e3vGfHt7xn17e8Z9fHzGfXx8xn18fMZ9fHzGgH9/xYmIiGVaV1cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
                label="Сохранить видимую часть страницы как PNG"
                value="page"/>
    
            <menuitem class="menuitem-iconic"
                image="data:image/x-icon;base64,AAABAAEAIBkAAAEAIAAMDQAAFgAAACgAAAAgAAAAMgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29fT/2tra/8jIyP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8jIyP/a2tr/9vX0/+zs7P/ak0b/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/9qTRv/s7Oz/7Ozs/+J9Dv/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+/6SdmP/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r/+vn4//z7+v/6+fj/4n0O/+zs7P/s7Oz/4n0O//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r//Pv6//z7+v/8+/r/aFtT//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//j39v/ifQ7/7Ozs/+zs7P/ifQ7/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P9oW1P/7+zq/+/s6v/v7Or/8O3r//Dt6//w7ev/8O3r//Dt6//w7ev/8O3r/+/s6v/w7ev/9fTy/+J9Dv/s7Oz/7Ozs/+J9Dv/49/b/+Pf2//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4/2hbU//q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/y8O//4n0O/+zs7P/s7Oz/4n0O//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/+Pf2//j39v/49/b/aFtT/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe//Dt6//ifQ7/7Ozs/+zs7P/ifQ7/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P/29fT/9vX0//b19P9oW1P/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/7uro/+J9Dv/s7Oz/7Ozs/+J9Dv/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx//Ty8f/08vH/9PLx/2hbU//x7+3/8vDv//Hv7f/x7+3/8e/t//Lw7//x7+3/8e/t//Lw7//x7+3/8vDv//Hv7f/29fT/4n0O/+zs7P/s7Oz/4n0O//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//8vDv//Lw7//y8O//aFtT/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/6igmP+ooJj/qKCY/8vGwf/ifQ7/7Ozs/+zs7P/ifQ7/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f/x7+3/8e/t//Hv7f9nWlL/aFtT/2hbU/9nWlL/Z1pS/2hbU/9oW1P/Z1pS/2daUv9oW1P/aFtT/2hbU/9nWlL/pJyX/+J9Dv/s7Oz/7Ozs/+J9Dv/w7ev/8O3r//Dt6//w7ev/8O3r//Dt6//x7+3/8O3r//Dt6//w7ev/8e/t//Dt6//w7ev/8O3r//Hv7f/w7ev/8O3r//Dt6//x7+3/8O3r//Dt6//w7ev/8e/t//Dt6//w7ev/8O3r//Dt6//w7ev/4n0O/+zs7P/s7Oz/4n0O/+/s6v/v7Or/7uro/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/v7Or/7+zq/+/s6v/u6uj/7+zq/+/s6v/ifQ7/7Ozs/+zs7P/ifQ7/7uro/+7q6P/u6uj/7uro/+zo5v/u6uj/7uro/+7q6P/s6Ob/7uro/+7q6P/u6uj/7Ojm/+7q6P/u6uj/7uro/+zo5v/u6uj/7uro/+7q6P/s6Ob/7uro/+7q6P/u6uj/7Ojm/+7q6P/u6uj/7Ojm/+J9Dv/s7Oz/7Ozs/+J9Dv/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/7Ojm/+zo5v/s6Ob/4n0O/+zs7P/s7Oz/4n0O/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/q5uT/6ubk/+rm5P/ifQ7/7Ozs/+zs7P/ifQ7/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+nl4v/p5eL/6eXi/+J9Dv/s7Oz/7Ozs/+J9Dv/m4d7/5uHe/+bh3v/p5eL/5uHe/+bh3v/m4d7/6eXi/+bh3v/m4d7/5uHe/+nl4v/m4d7/5uHe/+bh3v/p5eL/5uHe/+bh3v/m4d7/6eXi/+bh3v/m4d7/5uHe/+nl4v/m4d7/5uHe/+bh3v/p5eL/4n0O/+zs7P/s7Oz/4n0O/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/m4d7/5uHe/+bh3v/ifQ7/7Ozs/+zs7P/ifQ7/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+bh3v/k39z/5uHe/+Tf3P/m4d7/5N/c/+J9Dv/s7Oz/7Ozs/+J9Dv/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/i3Nn/4tzZ/+Lc2f/k39z/4n0O/+zs7P/s7Oz/4n0O/+Lc2f/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/h29j/4dvY/+Hb2P/ifQ7/7Ozs/+zs7P/ifQ7/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+DZ1v/g2db/4NnW/+J9Dv/s7Oz/9fTy/+J9Dv/8+/r/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/+vn4//r5+P/6+fj/4n0O//X08v/8+/r/6KFU/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ifQ7/4n0O/+J9Dv/ooVT//Pv6/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
                label="Сохранить выбранный элемент страницы как PNG"
                value="click"/>
    
            <menuitem class="menuitem-iconic"
                image="data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAADDn2Hfz5pE/8eVQP7IlkH/yJZB/8iWQf/IlUH/yJVA/8iVQP/IlED/yJQ//8iUP//IlD//yJM+/8iTPv/Hkj3/nI1w//bDbP//8OH//+zW///s1///69b//+rV///p1P//59L//+XQ///izf//38n//9vG///ZxP//1b///dG////Prf/KlkX/88N4/v37///99Pj//fT6//vy9v/68fT/+u/y//rt8P/66u3/+ufq//rl6P/64eT/+93h//3a3//71d7//9LK/86XR//0xHb//vv////18///9fT///f5///4////9f7///P8///v+f//7Pb//+nz///m8f//4eb//9vZ//3Y2v//1Mb/zphH//TGd//+/////Pj1///7///Q58r/m9aV/6TZnv+i15r/otWY/6LTlv+j0pb/mc6M/9DXuf//3+P//Nnc///Wyf/OmUf/9MZ3//7////8+/j//////53WnP+Y5pn/rvGv/6PvpP+e7p//me6b/5nvm/95533/mM+L///j7f/629z//9jL/86ZR//0xnf//v////z9+v//////qtup/8Xzxf/a/tn/z/vO/8n7yf/D+sL/xPvD/6Hzo/+j05b//+Tu//re3///2cz/zplI//XGeP/+/////P36//////+n26f/uvC6/9T71P/K+Mr/xvjG/8D3wP+/+L//nfCf/6LTlf//5u//+t/g///cz//OmUj/9MZ3//7////8/fr//////6rcqv/G9MX/3//f/9n92f/V/NX/0PzQ/9H+0P+s9a7/pdSY///o8f/64OL//9zP/86aSP/0xnf//v////z9+f//////ndid/5TjlP+v7q//qeyp/6jsqf+k7KX/p+6n/4Tlh/+Z0Y7//+r0//rh4v//3tH/zppI//TGd//+/////v77///////Y8Nj/p9+n/6/jr/+t4a3/rd2p/67bpv+u2ab/p9Wc/9jgx///6Oz//OPl///e0f/Omkj/9MV1//7//////fr///78///+/f///////////////////P////j////0+///8fn//+vu///m4v/94+P//97P/86ZSP/zx3v//v/////+/f///////f////v////7////+/////v+///7+///+/f///vz/P/98Pr//+33//3p9///5OL/zppL//a1Sv/0xoL/9cR7//XEfP/1xHz/9cR8//XEfP/1xH3/9cR8//XCev/1wXr/9b94//W9d//1u3X/87l0//y6bP/Llj7/+pMA/vWBAP/1gwD/9YMA//WDAP/1gwD/9YMA//WDAP/1gwD/9YQA//WEAP/1hAD/9YQA//WEAP/zhAH//okA/8qLIv3xpzP/4ptV/+OdU//jnVP/451T/+OdU//jnVP/451T/+OdU//jnVL/451S/+OdUv/jnVL/451S/+GdVf/qnUf/2aRJ/9q0c9/8yn7/98V5/vjGev/4xnr/+MZ6//jGev/4xnr/+MZ6//jGev/4xnr/+MZ6//jGev/4xnr/+MZ6/vrIe/+jj2y4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
                label="Сохранить выбранную область страницы как PNG"
                value="clipping"/>
        </menugroup>
    `);
    var menugroup = df.firstChild;
    menugroup.setAttribute("context", "");
    menugroup.setAttribute("oncommand", "handleCommand(event);");
    menugroup.handleCommand = e => {
        var name = _id + ":DataURLReady";
        main = main.replace("%MESSAGE_NAME%", name);

        var urls = {}, configurable = true, enumerable = true;
        Object.entries(parts).forEach(([key, part]) => Object.defineProperty(urls, key, {
            configurable, enumerable, get() {
                var value = `data:;charset=utf-8,({${
                    encodeURIComponent(main + part)
                }%0A}).init("${key}")`;
                Object.defineProperty(urls, key, {configurable, enumerable, value});
                return value;
        }}));
        var getTabLabel = () => {
            var label = gBrowser.selectedTab.label;      
            var label = label.replace(/[:+.\\\/<>?*|"]+/g, " ").replace(/\s\s+/g, " ");
            return label.substring(0, 50);
        }
        var listener = msg => {
            var fp = makeFilePicker();
            fp.init(window, "Сохранить как…", fp.modeSave);
            fp.appendFilter("", "*.png");
            fp.defaultString = getTabLabel() + ".png";
            fp.open(res => {
                if (res == fp.returnCancel || !fp.file) return;
                var wbp = makeWebBrowserPersist(), args = [
                    Services.io.newURI(msg.data), document.nodePrincipal,
                    null, null, null, null, fp.file, null
                ];
                var {length} = wbp.saveURI;
                length >= 9 && splice(args);
                length == 10 && args.splice(3, 0, null);
                wbp.saveURI(...args);


		setTimeout(async lp => {
			var d = await Downloads.createDownload({
				source: "about:blank", target: fp.file
			});
			(await lp).add(d);
			d.refresh(d.succeeded = true);
		}, 777, Downloads.getList(Downloads.ALL));
            });
        }
        var splice = arr => {
            var fox74 = parseInt(Services.appinfo.platformVersion) >= 74;
            var args = [fox74 ? 7 : 2, 0, fox74 ? Ci.nsIContentPolicy.TYPE_IMAGE : null];
            (splice = arr => arr.splice(...args))(arr);
        }		
        messageManager.addMessageListener(name, listener);
        addDestructor(() => messageManager.removeMessageListener(name, listener));

        (menugroup.handleCommand = e => gBrowser.selectedBrowser.messageManager
            .loadFrameScript(urls[e.target.value], false)
        )(e);
    }
    menuPopup.querySelector('menuitem[label*="ярлык"]').after(df);
})(`
    init(cmd) {
        cmd.startsWith("c")
            ? this[cmd].init(this[cmd].parent = this)
            : this[cmd]();
    },
    capture(win, x, y, width, height) {
        var canvas = win.document.createElementNS("${xhtmlns}", "canvas");
        canvas.width = width;
        canvas.height = height;
        var ctx = canvas.getContext("2d");
        var tryDraw = ind => {
            try {ctx.drawWindow(win, x, y, canvas.width, canvas.height, "white")}
            catch(ex) {canvas.height = ind * canvas.width; tryDraw(--ind);}
        }
        tryDraw(17);
        sendAsyncMessage("%MESSAGE_NAME%", canvas.toDataURL("image/png"));
    },
    `, {

    all: `all() {
        var win = content;
        this.capture(win, 0, 0, win.innerWidth + win.scrollMaxX, win.innerHeight + win.scrollMaxY);
    }`,
    page: `page() {
        var win = content, doc = win.document, body = doc.body, html = doc.documentElement;
        var scrX = (body.scrollLeft || html.scrollLeft) - html.clientLeft;
        var scrY = (body.scrollTop || html.scrollTop) - html.clientTop;
        this.capture(win, scrX, scrY, win.innerWidth, win.innerHeight);
    }`,
    clipping: `clipping: {
        handleEvent(e) {
            if (e.button) return false;
            e.preventDefault();
            e.stopPropagation();
            switch(e.type) {
                case "mousedown":
                    this.downX = e.pageX;
                    this.downY = e.pageY;
                    this.bs.left = this.downX + "px";
                    this.bs.top = this.downY + "px";
                    this.body.appendChild(this.box);
                    this.flag = true;
                    break;
                case "mousemove":
                    if (!this.flag) return;
                    this.moveX = e.pageX;
                    this.moveY = e.pageY;
                    if (this.downX > this.moveX) this.bs.left = this.moveX + "px";
                    if (this.downY > this.moveY) this.bs.top  = this.moveY + "px";
                    this.bs.width = Math.abs(this.moveX - this.downX) + "px";
                    this.bs.height = Math.abs(this.moveY - this.downY) + "px";
                    break;
                case "mouseup":
                    this.uninit();
                    break;
            }
        },
        init() {
            var win = {};
            Cc["@mozilla.org/focus-manager;1"].getService(Ci.nsIFocusManager)
                .getFocusedElementForWindow(content, true, win);
            this.win = win.value;

            this.doc = this.win.document;
            this.body = this.doc.body;
            if (!HTMLBodyElement.isInstance(this.body)) {
                Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
                    .showAlertNotification("${self.image}", ${JSON.stringify(self.label)}, "Не удается захватить!");
                return false;
            }
            this.flag = null;
            this.box = this.doc.createElement("div");
            this.bs = this.box.style;
            this.bs.border = "#0f0 dashed 2px";
            this.bs.position = "absolute";
            this.bs.zIndex = "2147483647";
            this.defaultCursor = this.win.getComputedStyle(this.body, "").cursor;
            this.body.style.cursor = "crosshair";
            ["click", "mouseup", "mousemove", "mousedown"].forEach(type=> this.doc.addEventListener(type, this, true));
        },
        uninit() {
            var pos = [this.win, parseInt(this.bs.left), parseInt(this.bs.top), parseInt(this.bs.width), parseInt(this.bs.height)];
            this.body.style.cursor = this.defaultCursor;
            this.body.removeChild(this.box);
            this.parent.capture.apply(this, pos);
            ["click", "mouseup", "mousemove", "mousedown"].forEach(type=> this.doc.removeEventListener(type, this, true));
        }
    }`,
    click: `click: {
        getPosition() {
            var html = this.doc.documentElement;
            var body = this.doc.body;
            var rect = this.target.getBoundingClientRect();
            return [
                this.win,
                Math.round(rect.left) + (body.scrollLeft || html.scrollLeft) - html.clientLeft,
                Math.round(rect.top) + (body.scrollTop || html.scrollTop) - html.clientTop,
                parseInt(rect.width),
                parseInt(rect.height)
            ];
        },
        highlight() {
            this.orgStyle = this.target.hasAttribute("style") ? this.target.style.cssText : false;
            this.target.style.cssText += "outline: red 2px solid; outline-offset: 2px; -moz-outline-radius: 2px;";
        },
        lowlight() {
            if (this.orgStyle) this.target.style.cssText = this.orgStyle;
            else this.target.removeAttribute("style");
        },
        handleEvent(e) {
            switch(e.type){
                case "click":
                    if (e.button) return;
                    e.preventDefault();
                    e.stopPropagation();
                    this.lowlight();
                    this.parent.capture.apply(this, this.getPosition());
                    this.uninit();
                    break;
                case "mouseover":
                    if (this.target) this.lowlight();
                    this.target = e.target;
                    this.highlight();
                    break;
            }
        },
        init() {
            this.win = content;
            this.doc = content.document;
            ["click", "mouseover"].forEach(type=> this.doc.addEventListener(type, this, true));
        },
        uninit() {
            this.target = false;
            ["click", "mouseover"].forEach(type=> this.doc.removeEventListener(type, this, true));
        }
    }`
});

this.onclick = e => e.button != 1 || gShowPopup(this); 
this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() };
var style = custombutton.buttonGetHelp(self).replace(/id/g, _id);
var uri = makeURI('data:text/css,'+ encodeURIComponent(style));
var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
sss.loadAndRegisterSheet(uri, 0);

Отредактировано ВВП (01-08-2022 13:42:15)

Отсутствует

 

№1655301-08-2022 22:25:12

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Firefox 85.0

Re: Custom Buttons

Я с помощью Fetch получаю HTML страницы с некоего сайта. Но мне не надо всю страницу, а только небольшой фрагмент в начале кода. Я хочу не загружать весь HTML  и потом вырезать нужный мне кусок, а что бы получение ответа на нужном месте прерывалось и я получал бы то что уже загружено.


Можно это как то реализовать? Сейчас появились  Streams_API может с их помощью? Если да, то просьба дать готовый код, потому что сам я это дело не осилю.

Отсутствует

 

№1655402-08-2022 10:56:56

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 78.0

Re: Custom Buttons

ВВП пишет

Не понял юмора, в 103 шрифты увеличились и окна тоже... отвязали от оси ?

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

Save

Правки здесь и здесь.


hartumov пишет

просьба дать готовый код

Это при том, что с тебя вообще ни одной строчки кода.

сам я это дело не осилю

Ну, вот мне about:license нарезает 73 × 4096 байт, но не всегда, почему-то.

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

Выделить код

Код:

(async () => {

	var response = await fetch("about:license");
	var reader = response.body.getReader();

	var result, decoder = new TextDecoder();

	while(!(result = await reader.read()).done) {

		var bytes = result.value;
		var html = decoder.decode(bytes);

		if (html.includes("the iStumbler")) {
			reader.cancel();
			alert(html);
		}
	}
})();

Отсутствует

 

№1655502-08-2022 11:39:08

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 332
UA: Firefox 103.0

Re: Custom Buttons

Dumby
Да, теперь класс !
это никак не заменить ?
var folderpath="C:\\Users\\Андрей\\Desktop";        // папка для сохранения иконок для ярлыков и ярлыков сайтов
на,типа:
var folderpath="C:\\Users\\USERPROFILE\\Desktop";

Отсутствует

 

№1655602-08-2022 14:58:59

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Firefox 85.0

Re: Custom Buttons

Dumby пишет

hartumov пишет

    просьба дать готовый код

Это при том, что с тебя вообще ни одной строчки кода.

А какой с меня может быть код? Обычный Fetch и дальше с помощью match получаю нужный кусок кода.

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

Выделить код

Код:

fetch(url)
 .then( async (response) => {
      let html = await response.text().match(/foo/)[0]; 
})

Dumby пишет

Ну, вот мне about:license нарезает 73 × 4096 байт, но не всегда, почему-то.

У меня этот код совсем не нарезает. Вот я запрашиваю главную страницу этого форума и хочу получить html по зарывающий тег title включительно. Делаю

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

Выделить код

Код:

(async () => {
  var response = await fetch("https://forum.mozilla-russia.org/index.php");
	var reader = response.body.getReader();
        var result, decoder = new TextDecoder();
        while(!(result = await reader.read()).done) {
                var bytes = result.value;
		var html = decoder.decode(bytes);
                if (html.includes("</title>")) {
			reader.cancel();
			alert(html);
		}
	}
})();


Получается код страницы полностью. Может я что неправильно делаю?

Отсутствует

 

№1655702-08-2022 16:53:24

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 78.0

Re: Custom Buttons

ВВП пишет

это никак не заменить ?
var folderpath

Это даже не используется никак практически.
И вообще saveShortcuts() бредятина какая-то.


hartumov пишет

Может я что неправильно делаю?

Да нет, всё как и предложено.
У меня, на синтетической странице с таким html, тоже бывает нестабильно.
Может по частям, а может и целиком.

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

Выделить код

Код:

(async () => {
	var arr = [];
	var response = await fetch(url);
	var reader = response.body.getReader();

	var result;
	while(!(result = await reader.read()).done) arr.push(result);

	console.log(arr);
})();


скриншот

Выделить код

Код:

data:image/png;base64,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


Вероятно, Streams_API просто не подходит для таких дел,
типа хорошее быстрое соединение, и вот и вываливает сразу всё что есть.
А задумано для чего-то медленного, и большого как видос, не знаю.
Тут надо сетевых людей спрашивать, тех, которые в этом понимают.

Отредактировано Dumby (02-08-2022 16:54:18)

Отсутствует

 

№1655802-08-2022 17:39:38

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 332
UA: Firefox 103.0

Re: Custom Buttons

Dumby

Dumby пишет

Это даже не используется никак практически.

Пардон, а это? Редактор файл падал в профиль ,а надо на раб.стол,к примеру...

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

Выделить код

Код:

let browserMM = gBrowser.selectedBrowser.messageManager;
 browserMM.addMessageListener('getSelect', function listener(message) {
   // создать текст для записи
   var text = convertFromUnicode("UTF-8", message.data); 
   var file = FileUtils.File(folderpath);
   file.append("TextToEditor.txt");
   custombuttonsUtils.writeFile(file.path, text);
   file.launch();


И еще,эта фича бьет по всем тестам в сидебаре
скрытый текст

Выделить код

Код:

.sidebar-placesTree treechildren::-moz-tree-cell-text{font-size: 14px !important; padding-left: 6px !important; font-family: segoe !important;}


включая и эти ,как бы отдельно сделать ?

Выделить код

Код:

data:image/jpeg;charset=utf-8;base64,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xigDjKK7P7B4a/58NY/8GMX/AMYo+weGv+fDWP8AwYxf/GKAOMors/sHhr/nw1j/AMGMX/xij7B4a/58NY/8GMX/AMYoA4yiuz+weGv+fDWP/BjF/wDGKPsHhr/nw1j/AMGMX/xigDjKK7P7B4a/58NY/wDBjF/8Yo+weGv+fDWP/BjF/wDGKAOMors/sHhr/nw1j/wYxf8Axij7B4a/58NY/wDBjF/8YoA4yiuz+weGv+fDWP8AwYxf/GKPsHhr/nw1j/wYxf8AxigDjKK7P7B4a/58NY/8GMX/AMYo+weGv+fDWP8AwYxf/GKAOMors/sHhr/nw1j/AMGMX/xij7B4a/58NY/8GMX/AMYoA4yiuz+weGv+fDWP/BjF/wDGKPsHhr/nw1j/AMGMX/xigDjKK7P7B4a/58NY/wDBjF/8Yo+weGv+fDWP/BjF/wDGKAOMors/sHhr/nw1j/wYxf8Axij7B4a/58NY/wDBjF/8YoA4yiuz+weGv+fDWP8AwYxf/GKPsHhr/nw1j/wYxf8AxigDjKK7P7B4a/58NY/8GMX/AMYo+weGv+fDWP8AwYxf/GKAOMors/sHhr/nw1j/AMGMX/xij7B4a/58NY/8GMX/AMYoA4yiuz+weGv+fDWP/BjF/wDGKPsHhr/nw1j/AMGMX/xigDjKK7P7B4a/58NY/wDBjF/8Yo+weGv+fDWP/BjF/wDGKAOMors/sHhr/nw1j/wYxf8Axij7B4a/58NY/wDBjF/8YoA4yiuz+weGv+fDWP8AwYxf/GKPsHhr/nw1j/wYxf8AxigDjKK7P7B4a/58NY/8GMX/AMYo+weGv+fDWP8AwYxf/GKAOMors/sHhr/nw1j/AMGMX/xij7B4a/58NY/8GMX/AMYoA4yiuz+weGv+fDWP/BjF/wDGKPsHhr/nw1j/AMGMX/xigDjKK7P7B4a/58NY/wDBjF/8Yo+weGv+fDWP/BjF/wDGKAOMors/sHhr/nw1j/wYxf8Axij7B4a/58NY/wDBjF/8YoA4yiuz+weGv+fDWP8AwYxf/GKPsHhr/nw1j/wYxf8AxigDjKK7P7B4a/58NY/8GMX/AMYo+weGv+fDWP8AwYxf/GKAOMors/sHhr/nw1j/AMGMX/xij7B4a/58NY/8GMX/AMYoA4yiuz+weGv+fDWP/BjF/wDGKPsHhr/nw1j/AMGMX/xigDjKK7P7B4a/58NY/wDBjF/8Yo+weGv+fDWP/BjF/wDGKAOMors/sHhr/nw1j/wYxf8Axij7B4a/58NY/wDBjF/8YoA4yiuz+weGv+fDWP8AwYxf/GKPsHhr/nw1j/wYxf8AxigDjKK7P7B4a/58NY/8GMX/AMYo+weGv+fDWP8AwYxf/GKAOMors/sHhr/nw1j/AMGMX/xij7B4a/58NY/8GMX/AMYoA4yiuz+weGv+fDWP/BjF/wDGKPsHhr/nw1j/AMGMX/xigDjK6LwD/wAjEf8Arxvf/SWWtH7B4a/58NY/8GMX/wAYq1px0PTJ5LmxsNSFyYJoUM18joPMjaMkgQgnAYnqKAM+iiigAooq9caTf2+lWupz2kyWF0zJDOV+RyvBAP5/kfQ0AUaKKKACivafht8KrfUjN/wkA3IyhoWicjjvVPx14D0XQ9VuLe3MoREBUFia3oYadeXLDcxrV4UY889jyKitrxBoF1pCQzzoFguOYec5FYtYtWdmap3VworsPh34TsfF95cWU2rTWF5HG0yqLQSq6KBn5vMXB9sfjU/hLwroHijxBaaPp+uapHc3O/Y0+lxhBtQuckXBPRT2pDOIoq3qsVnBqE8Wm3Ul3aI2I55IfJMg9dm44Gc45zjGcdBUoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvVPhyzaZ4L1a68WsreD7lSkVnIMyXNwOhg/ukY5bpx7ZHldSPPM8McLyyNDGSUQsSqZ64HbOBQAxypdigITPAJyQPrSUUUAfX3w6fdYWLetuP6VyHxT8M6vrGvz3Fkg8gIOT3xXnPw++Js/hlbj7akt2WAWNc8IK6u4+OccykHTHGeOorsw2IdCfPHc5q9CNaPJLY5j4uq0OkeHIX4ZYmyPcYrzKtPxBq8+sahLPLLK0RYmNHbOwHsKzK5Zu7bOiKsrHo/wEBPjmXAJ/0C4/9Bqt8B/+SraH/wBt/wD0RJXP+GPF2teF/NOh3MNq8v35DaxSOR6bmUnHtnFSaT401zSNWutT02e1tr65x5kqWMH/AI6NmFz32gZ6nNSM6XwLe3OieCLvVJb6TTdNbUkiMunx/wCm3Eqx7hEHJ2rGAdxyDnkc5we4a/l0v4u+PUtbmeytjozXMhgQMVdbeNhIFyAWBZiORyTyM15RB4+8SW4vhb6gsK3svnzrHbRIDJgDeoC/K2AOVwSeevNWU+JfixL2W7/tVWuJYhC7vawtlB2wUwM8Zx1wM5wMAHY/2p9s+GNjaR69qt1Y3PiBLS5lu0EL+U0e5k4kfK5O7k9c8VpeItek0rxRrXhc+HdRvLSaFoIbF79EtUhA+WWNPJGzAGd271ySRkeWTeMtam0F9Fea1Gluxc26WMCgMTncCEBB9wc1PeeP/FF7of8AZF1rE8lgYxEUKruZB/CXxuI+p5oA6nwV4h1tIvAdsNUv0tW1trby1nZVeENbYQgH5lG5xg56kVs6Vr9/FB8UZbnWtTto47qMie3/AHskRM/l5RS6gHaFThhhQMfdArz6Tx94kk1e21SS/je+tkKQyPawt5YOMkKUwG4HzYz701PHWvIuop59k0eoyia7R9OtmWZxjBZTHjqoP1yepJIAvjfwoPDQ0ue3v1v7DUrcXNtN5RiYrxwyEnHUd66/4OeKLmTWtJ0a61K4gtrdJIbOxRf3F1JIzMRMee7cHaeB25z554h1/U/EV2lzrF21zNGgjT5VRUUdgqgAD6Cr2keM9e0iKBLG8RDApWGSS2ikkiU9QjspZR7AigD0/wAOS33h2LTRqEy6ZbXWuzRQ22kph7iQSbGWVydvkqflC7STx9Ro6NKNO8UfE2yj1C60zTVImL25J+zs7DdIoyMHB6jsB6AV5Hp3jvxLp1h9jtNVlWDzWnG5Edg7HLMHYFgSSc4POT61ZPxH8UM96738EjXq7LjzLG3cSLz8pBQ/LyTt6ZJPUmgDb+Jd94h8OeKbXSLa6e3sdPKTaStvjiMrtVgwGWJwQc5yd3rWzq2u6vNoHxTjm1S+kjh1CGCJXuHYRxtPKrIoJ4UgAEDgjiuIs/iH4ns7azgg1FBHaQm3gL2sLskZx8gZkJx8q8Z7D0FU4/GOtx6LeaULmA2N4zPcI9pCzSsxyWZym4tk5BzkcYxgUAe16O0n9oX/AIb1ydnuP7BbzNOtE8uxt0CDGASSZeQSy4HPfHHmXg7WdWsPDlpbw6lcQW02t26wxRzFSQFbzQAD9354sjpkiqSfEzxchiI1hsxx+SCYIiWTGMNlfm4/vZqbWPiJqd2dOS1isFjsoI1R5tPglkMu1fMk3OrHLOGbIxnjPNAHovidro+JfiXrFszTavpENrHYu53G2if/AFrRg8KQu45HTcfU5wrbVrrU/BnhPXruWUa/aa6NPjvdxEs8BTcdx/i6hcnPf1NcrrHxD1a812z1yzlSz1cWX2W7lihULOfMc5KnIbKlAcjqvsKx5fFmsS6jp969xEZdPGLVBbRCKHvlYguwHPOducgHsKAPZfilPqemWuua74e1KWWX7b9h1FpFDNbRbcJEgOQEJcnIwSXFfPtdW3xB8Ste39019CZr+JYbvNnBtnUZxvXZtY/MRkjOOM4rlKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKkeGVIY5XjdYpCQjlSFYjrg98ZH51HXqnw5J1XwXq1j4sVR4Qs1MkV7IcSWtweQsP94nPK9OffBAPK6KVwodghJTPBIwSPpSUAfQ9l8N/DE8cSvotwbhk3lEvO3qAXzin/APCrNFG8t4fudoJxi7PT3+frXU6fGx1mKT7HbshsgnnCbEp5+7tz098VuQqEYt9mkj+U/MZt36ZrZwirWMVKXU+YviBD4atXS38PwSw3UUhScO7NjGeOSe9cbWt4u/5GjVf+vmT/ANCNZNYmyOl8EeELvxjfyWWm3llDdohkEdyZF3KMZIKoR3HUiufu7eWzu5ra5Qxzwu0ciHqrA4I/MV2Hwsu5tPv9dvLVtlxb6RPNG3oylCD+Yrs/FOk2GpeINN8eog/sK4tDqN3Hxjz4tq+ST0y7lFx3+c9qAOE8U+BNQ8L6PY32r3lhFLeIJIrNWkM+OM5GzaCMjPzfnXJV7zr9injDUvhfBrDM639rLNcbTtLnaHI9skY/GuR1TW/D13omo20Wlu2sW8i3FrLFoMNsttsb5llAlfenb5wcHruoA80or6FbTNJk+KmgWxj8NQ2s1mhk0v8Asz5pS8ZYtkQlM5UEEuCACO5B4rw3d2+ueA/F8t9b+H7C4hlt/KvH01AIVlZgyr5cTMOFwCASM5yOtAHl9Fez6imlaN8UbLwbLoGnyaI/k2TO9spuJmlVf33nffBDN2OAAeM9PMtSgg0DxldW/li8tdOv3j2SYxMkchGDxjkD079KAMWivWLpLbX/AIba3qFvpuj3N/58LRQ6XZJDLpqF8EOQFZwQMcBuSTnHTauNN06a08U6ff6botleWujNdw6bbWqyTWRRVwz3IVSXJblfm4I5HOQDw2ivb/C+jw654H8NmPT9FlvRFeTtAbJEnv8A7OyiNPMCjAyV3EsGYeuWrj/Dusm+vvFF1LpGiQyDTmmSFdNiMcEkZVQUV1O3O459T16DABwFFewXcf2zxF4FtbXw5pN79o0uO/uII7aK1E0jeYC0jqnCLtDYxjjocis/xxa6bcfDa01K2OlXF/FqzWct1p1iLWMjyt5QAAbwDjDYGR27kA8vor2bQru1uLu8WXSdCka08KtqDRnTLfH2kIrq5wmeVZTjpz0rD1MxeE/CHhnUoNN0m9vNaM11cyXdmkq4VlxGinhFw3O0A+hGKAPNaK93OiaPo/jzWY7Sx0wWF14ffVkiv7VbiO1lAJBHyswUckheoPQ4XHEfFC3k0B4NBOmaYkRWO7XUobZVluiwJYqw4WPcSAgAwFHagDz+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACr1xq9/caVa6ZPdyvYWrM8MBPyoWOScf56n1qjRQAUUUUAfQFp8T/AAqqxySrOLgR+WzBG6elTr8VvC0eTGbkNjH3HNeC6dpd7qTMLG1mn29fLUnFdl4p+G2o6No+l3kENxcSXEe6eNVz5bccYA+tZzxMKclGT1YRo3V0jj9eukvtavrqHPlzTM659CaoU+WN4ZGjlRkdTgqwwRTK0A6Hwt4nbw7DepDpWm3jXcbQyPdrKT5bYyg2uoAOPTPvTf8AhKb/AP4R/wDsPbF/ZP237b9m3Ptz/wA887s7O+M5zznPNZWnafe6nci302zuLy4ILeVbxNI2B1OACa1f+EL8U/8AQta3/wCAEv8A8TQBr6t8RtR1C30pItO0ywm0rb9huLRZVkgAxwN0hBBwAQwNM8RfEK/16N0utL0aHz5Ee7a2tjG92FIIWRw24jIHQg8da5K8tbiyuZLa8glt7iM7XilQoyn0IPIqGgDvZPibfv4ps/EB0bRRqNrAbeMiObaB0Bx5nUDIB9GOc8Yzz42ddB1XSINC0aCz1J/Nm8tZgysOVKkynG08gdPUEcVyVFAHan4j6q72dzPZaZNqtnCYLfUpIWNwgxwfvbGI7Eqcfia49biQXQuGYSTb/MJlAfc2c5YNkN75zmoqKAOuXx1e22l3tjpOnaXpYvWRria0jcSPtOQPmdgoz2UAcmtKX4qatJfXl22laF517btbXZ+yH/SAQBlzuySAuMZxycg8Y8/ooA7a3+I2o21jo9va6ZpMEmkyGW1uIopFkVmP7zPz7cPyGGMc8AYGItW8e3Gow3qDQ9DtJL1i1xPawPHJICysylt5O1ioyPc9MmuOooA7tPiXqMOoaTeWmlaRbTaZB9kh8uOUhoMEeU+6Q7l5z6579c2dG+IMMoTTdd0XRv8AhHxO92baC1K7XEZAVOT95gBk5PzHkDp53RQB6JpnxIht/Et3qU/hnSzHfI9vdhHnLvA2AUG6QoOABwoHGBis6TxkbO2utFhsNO1PQIr157GK9jkPkjcSNpDK2COobOcnPU1xlFAHZad8QtTtdY1XU7mz07ULnUYfs0n2uNyqQkYMaKrKApGBjnoPfNTW/GV3rPh2z0e9sdPMNkT9lmCyedAhOfLVi5yoGFwwJwBzkZrmKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvTvh9a23i7wtf6Fq9pHa2+mxvdwa0qBRak8lZTxuVsfXj2GPMa2ZfEmoyeGINAWRItNilaZkiQKZmPeQj72O2f6DABjuArsoYMAcBhnB9+aSiigD3z4T2seg+EYNQkZI7m8m+VpOBtHUfrXbX3iC3eGTbdpkEA7sDI/2fWoNJuLGHQra0+1pGix4MJYYz70yzTSbe4EkU6Iw6MZg23/dGOP1rzcZlMcXVVRzta2nR+v5GtLE+zjax4p8ZdHj0zxUZrZcW12gljx0wf8A9dcFXtPx6mt7rS9OlinE8iTbC+QSBtPH6V4tXpWS0RinfUuaLBNdaxYW9pI0VxLPHHFIhIZGLAAjHcGvW/h3P5vxa8czxt9+21B1ZT6zAgiuf+Gdjoum6Pd+LNa1J7ae0nNtYxrB5v74x5D7cjdjOQMgZHJq38L9X8I6F4gu5brWNVJvrV7Qy3FgkSJvK5YlZXPb0x6mgZl6P4e8Lf8ACBxeItYutYyL82UkNssYLt5YfCZzjg9Sf4Txzx0lt8PfCreJLOwe71ea11eyF7pMySxxlztJMUmUOG4yG4HOMZ6xz6RpulfC7U9O1ybUTa2nieaGK5s4FYuUiCbirMBtOG6Nwcda5zU9R1XxVrWk/wDCIadqT2+hww29ntj8ySPaciSQqNqksM+nFAFWx0nQrPw5JqPiK11hJn1BrWCCG5jjYooBkJDRkkpkAngEsBhcGtHxXovg/QPEesaPMmtCWyUGGY3cbLO2FbYQIcpkEgHJAPWnfEzX7DW/iAsV+Xi0ixYxSiyQOWfJaZlBKglnJGc9ADz0rG+IWs6X4k8b3OrWL3sdleMjSiaBBJEQArbQHIbgZGSvXHGMkA7ZPh34fm+IFhoUCa19gms0nmuWuYso8g3IP9XjoCMck5zwFOcDR/CWkXukTa7Kt2mmS3n2a0t5dStbaUqoBZ2klAUnnhVXr371vz/EXw9J480XWQ2tDTdOt9otvs0QZpguwMT5mCCpPJ5G0AdTjB0nxL4WGgXnhvXLfV7rR0ujdWFzCsaXEJK4IZSxX17nrnHTABz/AI90XTtC8QNa6LqcOpWDRrLHNHKkhXPVGKHG4EHp2xXUeFfCXhnX7OR1OtQW9tZCW81WSSMW0VxsDGMKY8kZJH3s8dwQa4fxDdafc34GjWj21hDGIohKQZXAyS8hHBYknpwBgDpXV+A/Enh/wrqkWqo+uNMsDI9gFjMMzlSPnk3AlOc7dmQccmgC/wDD/wAE6J4ltdNVzq89xOzpd3FuyxQWbZ+RSZE/eMRg4VsjNN8M+BtP1fTPEEMdrq17rmk3aWoS3uI0il3uyh+Y2KhdhJ5P1GeLWh+PPDlra+EZLy01WO70LKmC18vyJCTzJycljycYGSeveksfGvhzTYPEMumy63b6hqN9FfRStbxusZjcuFbEoyGLNn0Bx82OQDDi0rwlJ4x03RYTrk0Uk5s7mYyRR5lLhFeP5T8mc5B55HPHKXGj+HJvA0et2sWqWc0up/2ePPu0nSNQiu0hCwqW4JG0Y9c9q2dU8U+Cb7xUviZbPXIdTBjufs0aRCA3C8klt27aSB0A6E4OcDMsPEfh+w8GaVpyDUri+tNUj1SVJbeMQyHCq0QO8kDavBIOT2GeADW1T4faU3hbXNU0ldWjWwRJra4vXRUvY8gMwi2K6DrjOQeOfTL8HeHvDmuN4dtriLV1utRuprSd0uo1RCixtuVTESQRJ0J4x1Nbt3488KSTeLJFh8QSNr8QDmTyh5ZB4ReTgds84GOOOWjUPCnhTxho0EWq6rcQ6DK6uqWCFZJix8xt5kU/3R908IMZ60AU9G8G6Hqk3i6K0sNfurjSJ1itYLe6jLzhn8v5v3XGGBYnoFP+zk19K8NeFbrxrpvhpn1qW5aV7W9nSWKNFmXvGCjErkODnHYg9q1LnXPDmg33i23W+1dpdXltr20ura1jIiHyXKMQzqchmwRjovqeGyeOPCt3450fxZcW+q22oQoGvreC3jeOaULgMrGQEe+R2HvQBQh8KeHhoXirVbq31tLfS5gloouogZ1LiLJ/d9n5JAxg4GSpNebV6SfFfh65svF9vfXGtMdYaNbZktYsQRRuJEBXzP72QQOwznJOPNqACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAHmWQwrEXYxKxZUJ4BOASB6naPyHpTKKKANefxNr09k9nPreqSWjja0D3chRh6FScYqpp2qahpnnf2bfXVp5y7ZPImaPePRsEZH1qnRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/2Q==

Отредактировано ВВП (02-08-2022 18:08:38)

Отсутствует

 

№1655902-08-2022 19:29:15

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Firefox 85.0

Re: Custom Buttons

Dumby пишет

Вероятно, Streams_API просто не подходит для таких дел,
типа хорошее быстрое соединение, и вот и вываливает сразу всё что есть.
А задумано для чего-то медленного, и большого как видос, не знаю.
Тут надо сетевых людей спрашивать, тех, которые в этом понимают.

Ну бог с ним, значит не суждено. Спасибо за помощь.

Отсутствует

 

№1656002-08-2022 20:36:11

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 78.0

Re: Custom Buttons

ВВП пишет

Пардон, а это?

Мне показалось, что речь о кнопке Save,
код которой предоставлен здесь.
И там я «это» не вижу.

включая и эти

«эти» в смысле папки? Может как-то так

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

Выделить код

Код:

.sidebar-placesTree treechildren::-moz-tree-cell-text {
	font-size: 14px !important;
	padding-left: 6px !important;
	font-family: segoe !important;
}
.sidebar-placesTree treechildren::-moz-tree-cell-text(container) {
	color: red !important;
	font-size: 18px !important;
	font-style: italic !important;
	font-family: consolas !important;
}

Отсутствует

 

№1656102-08-2022 21:54:36

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 332
UA: Firefox 103.0

Re: Custom Buttons

Dumby
Так и делал...font-size один черт не менялся. А, так . встало ,как надо

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

Выделить код

Код:

.sidebar-panel .sidebar-placesTreechildren::-moz-tree-cell-text{font-size: 14px !important; padding-left: 6px !important; font-family: segoe !important;}
.sidebar-panel .sidebar-placesTreechildren::-moz-tree-cell-text(container){font-family: segoe !important; font-size: 15px !important;padding: 0 0 1px 5px !important;}

Отсутствует

 

№1656205-08-2022 22:35:57

Пандёнок
Участник
 
Группа: Extensions
Зарегистрирован: 04-11-2008
Сообщений: 5543
UA: Firefox 103.0

Re: Custom Buttons

Кто-нибудь может расписать полностью порядок действий, что нужно сделать (как настроить браузер, откуда скачивать расширение), чтобы поставить Custom Buttons на последнюю версию Firefox? Или оно только в форках работает?
Перечитывать всю тему и собирать советы с миру по нитке ни я не буду, ни 99,9% пользователей не будут.
Надо выписать всё, что касается установки, в отдельную тему в этом разделе.

Отсутствует

 

№1656305-08-2022 23:09:45

Farby
Участник
 
Группа: Members
Зарегистрирован: 21-11-2012
Сообщений: 243
UA: Google 2.1

Re: Custom Buttons

Войдите или зарегистрируйтесь, чтобы увидеть скрытый текст.


Жизнь иногда такое выкидывает, что хочется подобрать...

Отсутствует

 

№1656407-08-2022 12:06:24

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 395
UA: Firefox 97.0

Re: Custom Buttons

Пандёнок пишет

Надо выписать всё, что касается установки, в отдельную тему в этом разделе.

Укажите пост с инструкцией, добавлю в шапку темы UCF - ваши кнопки, темы, дополнения
будет проще искать…

Отсутствует

 

№1656507-08-2022 18:47:28

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 103.0

Re: Custom Buttons

Пандёнок
Я использую paxmod. Для этого надо править omni.ja\modules\AppConstants.jsm. Правлю в Total Commander. Если переименовать в omni.zip, можно посмотреть архив и файл в Проводнике, но изменить не получится. Также и с 7-zip. Сложно всё это и расписывать я точно не возьмусь.

Отсутствует

 

№1656607-08-2022 20:39:10

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1419
UA: Firefox 91.0

Re: Custom Buttons

xrun1
omni.ja это rar, следовательно и редактировать можно только в самом winrar или программах использующих unrar.

Отсутствует

 

№1656708-08-2022 02:22:24

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 103.0

Re: Custom Buttons

_zt
winrar не пользуюсь. Я знаю, что можно им, но мне бесплатного 7-zip хватает.
:offtopic:

скрытый текст
А для архивации профилей ради спортивного интереса сам написал архиватор.)) Почти сам, библиотека 7-zip.dll
Image002_2022-08-08_01-08.png

Отсутствует

 

№1656809-08-2022 22:50:10

kazarin
Участник
 
Группа: Members
Зарегистрирован: 23-11-2016
Сообщений: 83
UA: unknown 0.0

Re: Custom Buttons

xrun1 пишет

Я использую paxmod. Для этого надо править omni.ja\modules\AppConstants.jsm.

Это с какой версии теперь так ставится?:o

upd Проверил на [firefox] 103.0.2 Stable от 9.08.2022 - ставится как обычно, перетаскиванием в окно.

Отредактировано kazarin (09-08-2022 23:32:40)

Отсутствует

 

№1656909-08-2022 23:53:06

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Chrome 86.0

Re: Custom Buttons

kazarin
С той поры, как появился paxmod от Dumby. Возможно, Вы используете какой-нибудь свой config.js. У меня только стандартный для ucf, который сделал Виталий. + пару своих lockPref добавил.

config для ucf

Выделить код

Код:

//
try {(function() {
//  var {classes: Cc, interfaces: Ci, utils: Cu} = Components; // для FF < 60
    var sandbox = Cu.Sandbox(Cc["@mozilla.org/systemprincipal;1"].createInstance(Ci.nsIPrincipal), {
        wantComponents: true,
        sandboxName: "user_chrome_files"
    });
//  Object.assign(sandbox, {Cc, Ci, Cu}); // для FF < 60
    Cu.evalInSandbox(`
        try {
            Cu.importGlobalProperties(["ChromeUtils"]);
        } catch(ex) {
            if (!("ChromeUtils" in this))
                Object.defineProperty(this, "ChromeUtils", {
                    configurable: true,
                    enumerable: true,
                    value: {
                        import(module, scope = {}) {
                            return Cu.import(module, scope);
                        },
                    },
                    writable: true,
                });
        }
        var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
        var user_chrome_files_sandbox = {
            subScript: {},
            init() {
                Services.obs.addObserver(this, "domwindowopened", false);
                Services.obs.addObserver(this, "profile-after-change", false);
            },
            observe(aSubject, aTopic, aData) {
                ({
                    "domwindowopened": () => {
                        if (!(aSubject instanceof Ci.nsIDOMWindow)) return;
                        aSubject.addEventListener("DOMContentLoaded", () => {
                            var loc = aSubject.location;
                            if (loc && loc.protocol == "chrome:") {
                                try {
                                    this.subScript.user_chrome.loadIntoWindow(aSubject, loc.href);
                                } catch(ex) { }
                            }
                        }, { once: true, capture: true });
                    },
                    "profile-after-change": () => {
                        Services.obs.removeObserver(this, "profile-after-change");
                        var file = Services.dirsvc.get("UChrm", Ci.nsIFile);
                        file.append("user_chrome_files");
                        file.append("user_chrome.manifest");
                        if (!file.exists() || !file.isFile()) {
                            this.removeObs();
                            return;
                        }
                        try {
                            Components.manager.QueryInterface(Ci.nsIComponentRegistrar)
                            .autoRegister(file);
                        } catch(ex) {
                            this.removeObs();
                            return;
                        }

                        try {
                            Services.scriptloader.loadSubScript("chrome://user_chrome_files/content/user_chrome.js", this.subScript, "UTF-8");
                        } catch(ex) {
                            this.removeObs();
                        }
                    },
                })[aTopic]();
            },
            removeObs() {
                Services.obs.removeObserver(this, "domwindowopened");
            },
        };
        user_chrome_files_sandbox.init();
    `, sandbox);
})();} catch(ex) {
    if ("Cu" in globalThis)
        Cu.reportError(ex);
    else
        Components.utils.reportError(ex);
}

lockPref("browser.bookmarks.showMobileBookmarks", false);
lockPref("extensions.legacy.enabled", true);
lockPref("xpinstall.signatures.required", false);
lockPref("extensions.experiments.enabled", true);
lockPref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
lockPref("extensions.langpacks.signatures.required", false);


Мне другой config.js не нужен, т.к. всё равно правлю omni.ja - заменяю словарь на русско-английский, меняю omni.ja\chrome\toolkit\skin\classic\global\icons\defaultFavicon.svg
и ещё по мелочи (запрещаю репортинг, телеметрию, WebRTC, maintenance_service)...

Добавлено 09-08-2022 23:57:32
Всё начиналось здесь)) https://forum.mozilla-russia.org/viewtopic.php?pid=761035#p761035

Добавлено 10-08-2022 00:15:07
Что-то форум глючит. У меня UA в подписи к сообщению №16569 неправильный, а к №16567 правильный. И при большом посте предпросмотр не работает. Проверил на [firefox] и Cent.

Отредактировано xrun1 (10-08-2022 00:15:07)

Отсутствует

 

№1657010-08-2022 00:20:35

kazarin
Участник
 
Группа: Members
Зарегистрирован: 23-11-2016
Сообщений: 83
UA: unknown 0.0

Re: Custom Buttons

xrun1
Ну, не свой, конечно. У меня совмещённый конфиг, от Dumby + от Виталия + от Onemen-а (создатель TabMixPlus, одновременно подключает и utils). Lockpref-ы тоже добавлял свои.
А вот omni.ja я править не умею (знаю как и чем, просто не разбираюсь в нём).
К сожалению, картинка в посте, на который вы дали ссылку, не работает (радикал давно уже помер).

У меня UA правильно отображается на обоих сообщениях.

Отредактировано kazarin (10-08-2022 00:22:51)

Отсутствует

 

№1657110-08-2022 01:16:25

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 103.0

Re: Custom Buttons

kazarin
Картинки там нет, просто после этого сообщения я и залез в omni.ja
А раз у Вас ставится без правки, то и лазить туда не надо. Я просто привык к двуязычному словарю и стандартная иконка мне не нравится. Остальное не так важно, блокируется в about:config.
А про глюк форума в отображении картинок это имел ввиду. С 08-08-2022 ничего не изменилось у меня в компьютере, обновлений не ставил. Ну и предварительный просмотр с длинным сообщением остаётся в силе, это было и 8-го числа, когда вместо картинки пробовал вставить код в base64.

скрытый текст
Image002_2022-08-10_00-08.png

Отсутствует

 

№1657210-08-2022 23:49:18

kazarin
Участник
 
Группа: Members
Зарегистрирован: 23-11-2016
Сообщений: 83
UA: unknown 0.0

Re: Custom Buttons

xrun1
Это хорошо, что не надо, а то я уже напрягся - что же там покалечили в новом [firefox].
Хотя, если подумать, осваивать бы всё равно пришлось, если отключать только так и никак:)
Я понял, про что вы, просто уточнил, что с моей стороны всё отображается верно - как я забыл переключить UA после скачивания аддонов Басилиска, так форум и отобразил.
А большое сообщение у меня тоже не грузится (сделал как вы, скопировал длинный base64 код). Тробблер крутится, если вывести курсор за пределы окна сообщения, и всё.

Отсутствует

 

№1657316-08-2022 13:16:30

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 332
UA: Firefox 103.0

Re: Custom Buttons

Dumby
Откуда это ?
$("application-box").textContent =  data.name;
data.name - в exe или в DLL ? , как сменить текст "FIREFOX"

f65fvuvl.jpg

Отредактировано ВВП (16-08-2022 18:18:48)

Отсутствует

 

№1657416-08-2022 21:02:46

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 78.0

Re: Custom Buttons

ВВП пишет

как сменить текст "FIREFOX"

Заменить Services.appinfo.name на что-то другое в
resource://gre/modules/Troubleshoot.jsm

Отсутствует

 

№1657516-08-2022 22:24:13

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 332
UA: Firefox 103.0

Re: Custom Buttons

Dumby
Services.appinfo.vendor - на это сменил , теперь Mozilla , а я хочу свое.
Впрочем :
let data = {
      name: AppConstants.MOZ_APP_NAME, И все.
MOZ_APP_NAME это в AppConstants.jsm. Дальше в Troubleshoot.jsm

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

Выделить код

Код:

let data = {
      name: AppConstants.MOZ_APP_NAME,


3dyqjhvf.jpg

Отредактировано ВВП (17-08-2022 10:40:50)

Отсутствует

 

Board footer

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