momo2000
Уничтожение конфигурационного файла решили временно отложить.
Поэтому, внимание, — новая дополнительная третья настройка.
pref("general.config.obscure_value", 0); pref("general.config.filename", "config.js"); pref("general.config.sandbox_enabled", false);
// try {(code => { var {classes: Cc, interfaces: Ci, utils: Cu} = Components; var jsval, evl = true, re = e => Cu.reportError(e), imp = name => {try { return Cu.import(`resource://gre/modules/addons/${name}.jsm`, {}); } catch(ex) {}} if ((jsval = imp("AddonSettings"))) { jsval.AddonSettings = {ADDON_SIGNING: false, REQUIRE_SIGNING: false, ALLOW_LEGACY_EXTENSIONS: true}; try {evl = jsval.eval("this") === jsval;} catch(ex) {evl = false;} } var jsvals = ["XPIProvider", "XPIInstall"].map(imp).filter(i => i); jsvals[0].AddonSettings && lockPref("extensions.allow-non-mpc-extensions", true); jsvals[0].signaturesNotRequired = true; if (evl) return jsvals.forEach(jsval => {try {jsval.eval(code);} catch(ex) {re(ex);}}); var sl = Cc["@mozilla.org/moz/jssubscript-loader;1"].getService(Ci.mozIJSSubScriptLoader); Cu.importGlobalProperties(["URL", "Blob"]); var url = URL.createObjectURL(new Blob([(code)])); jsvals.forEach(jsval => {try {sl.loadSubScript(url, jsval);} catch(ex) {re(ex);}}); })(String.raw`((vzss, pckg) => { var trueDesc = {enumerable: true, value: true}; typeof Extension == "function" && Object.defineProperty(Extension.prototype, "experimentsAllowed", trueDesc); "AddonInternal" in this && Object.defineProperty(AddonInternal.prototype, "providesUpdatesSecurely", trueDesc); this.isDisabledLegacy = () => false; if ("XPIDatabase" in this) this.XPIDatabase.isDisabledLegacy = () => false; try {SIGNED_TYPES.clear();} catch(ex) {}; if (!vzss && !pckg) return; var re = /\x06\x03U\x04\x03..(\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}|[a-z0-9-\._]*\@[a-z0-9-\._]+)0\x82\x02"0\r\x06\t/i; var getUUID = () => { var gen = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator); return (getUUID = () => gen.generateUUID().toString())(); } var getIdFromString = str => { var match = str && str.match(re); return match ? match[1] : getUUID(); } var getState = arg => ({ signedState: AddonManager.SIGNEDSTATE_NOT_REQUIRED, cert: typeof arg == "object" ? arg : {commonName: arg} }); var checkAddon = addon => { if (addon.id || ( "_installLocation" in addon ? addon._installLocation.name == KEY_APP_TEMPORARY : addon.location.isTemporary )) return getState(null); } var getRoot = () => !AppConstants.MOZ_REQUIRE_SIGNING && Services.prefs.getBoolPref(PREF_XPI_SIGNATURES_DEV_ROOT, false) ? Ci.nsIX509CertDB.AddonsStageRoot : Ci.nsIX509CertDB.AddonsPublicRoot; if (vzss) { var getURI = file => { var jsval = Cu.import("resource://gre/modules/addons/XPIProvider.jsm", {}); return (getURI = file => jsval.getURIForResourceInFile(file, "META-INF/mozilla.rsa"))(file); } var getIdFromFile = file => { var str, is = {close() {}}, sis = {close() {}}; try { is = Services.io.newChannelFromURIWithLoadInfo(getURI(file), null).open(); sis = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream); sis.init(is); str = sis.readBytes(sis.available()); } catch(ex) {} sis.close(); is.close(); return getIdFromString(str); } this.verifyZipSignedState = function verifyZipSignedState(aFile, aAddon) { var res = checkAddon(aAddon); return res ? Promise.resolve(res) : new Promise(resolve => { var callback = {openSignedAppFileFinished(rv, zipReader, cert) { zipReader && zipReader.close(); resolve(getState(cert || getIdFromFile(aFile))); }}; gCertDB.openSignedAppFileAsync(getRoot(), aFile, callback.wrappedJSObject = callback); }); } } if (pckg) Package.prototype.verifySignedState = function verifySignedState(addon) { var res = checkAddon(addon); return res ? Promise.resolve(res) : new Promise(resolve => this.verifySignedStateForRoot(addon, getRoot()).then(({cert}) => { if (cert) resolve(getState(cert)); else this.readBinary("META-INF", "mozilla.rsa").then( buffer => resolve(getState( getIdFromString(String.fromCharCode(...new Uint8Array(buffer))) )), () => resolve(getState(getUUID())) ); }, Cu.reportError) ); } })( "verifyZipSignedState" in this, typeof Package == "function" );`)} catch(err) { err.message != "Components is not defined" && Components.utils.reportError(err); }
Отсутствует
Исправил кнопки Часы и Экспорт всех CB кнопок в HTML файл для соместимости с FF58.
Добрый день!
Можете исправить для 61 (Экспорт всех CB кнопок в HTML файл)
она опять перестала рабоатать
Спасибо!
Отредактировано suz191 (25-08-2018 22:46:27)
Отсутствует
Отсутствует
Dumby
А такой костыль не пашет? через правку omni.ja, пробовал но бывает через время слетает.
Путь к AppConstants.jsm внутри omni.ja
omni.ja\modules\AppConstants.jsm
(ниже изображение)
Отредактировано func4ptch4 (30-08-2018 20:10:48)
Отсутствует
func4ptch4
И это тоже xpinstall.signatures.required - false
Добавлено 30-08-2018 21:33:32
Dumby
Не подскажите, где здесь поганка завернута? В 60 - ок, 61-62 -правый клик не того..
this.onclick = this.oncontextmenu = e => { if(e.button == 0) { if(cbu.getPrefs("CB.videoout.action").substring(0,6) == "videom"){ elem = content.document.getElementsByTagName('object'); if(elem.length == 0) { elem = content.document.getElementsByTagName('embed') }; resizeObjs(elem); resizeObjs(content.document.getElementsByTagName('iframe')); resizeObjs(content.document.getElementsByTagName('video')); } else { if(!handlWin(content))custombuttons.alertSlide1(noFound); } }; if(e.button == 1) gShowPopup(self); if(e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey) { e.preventDefault(); menu.showPopup(self, -1, -1, "popup", "bottomleft", "topleft"); } };
Отредактировано drage2 (30-08-2018 21:33:32)
Отсутствует
А такой костыль не пашет? через правку omni.ja, пробовал но бывает через время слетает.
Ну почему же, вполне себе пашет.
Rob W не стал бы патчер предлагать если б не работало.
Я, например, прямо в Notepad++ omni.ja подправил, даже задумываться
ни о чём не надо, поскольку количество символов не меняется.
Интересно, а при каких обстоятельствах слетает?
Не подскажите, где здесь поганка завернута? В 60 - ок, 61-62 -правый клик не того..
Где поганка завёрнута я уже говорил.
Надо лишь по ссылкам проследовать.
И не указано что за «menu».
Если оно добавлено к кнопке, то, в общем случае, как-то так.
this.onclick = e => { if (e.target != this) return; if (!e.button) { alert("left click"); } else if (e.button == 1) gShowPopup(this); } this.oncontextmenu = e => e.target != this ? menu.hasAttribute("context") : e.ctrlKey || e.shiftKey || e.altKey || e.metaKey || ( e.detail != 1 ? menu.hidePopup() : !!menu.openPopup(this, "after_start") );
Отредактировано Dumby (31-08-2018 02:27:49)
Отсутствует
Dumby
Не получилось, теперь левая сдохла, да и черт с ним...Итак сойдет. Кстати, как с этими угрожающими надписями ? Раз уж лезем в Omni.ja
В смысле , без стиля ....Есть способ, если парит, конечно.
Брзо извињавам се, сделал кнопку ! А, это так: mozzaps-extensions-extensions.css - заменить на это
.addon:not([signatures="warning"]) .warning, .addon:not([notification="warning"]) .warning, .addon:not([notification="error"]) .error, .addon:not([notification="info"]) .info, .addon:not([pending]) .pending, .addon:not([upgrade="true"]) .update-postfix, .addon[active="true"] .disabled-postfix, .addon[pending="install"] .update-postfix, .addon[pending="install"] .disabled-postfix, .addon[legacy="false"] .legacy-warning, .addon[legacy="true"] .legacy-warning, #detail-view:not([signatures="warning"]) .warning, #detail-view:not([notification="warning"]) .warning, #detail-view:not([notification="error"]) .error, #detail-view:not([notification="info"]) .info, #detail-view:not([pending]) .pending, #detail-view:not([upgrade="true"]) .update-postfix, #detail-view[active="true"] .disabled-postfix, #detail-view[legacy="false"] .legacy-warning, #detail-view[legacy="true"] .legacy-warning, #detail-view[loading] .detail-view-container, #detail-view:not([loading]) .alert-container, .detail-row:not([value]), #search-list[remote="false"] #search-allresults-link, #legacy-list .addon .disabled-postfix { display: none; }
Отредактировано drage2 (31-08-2018 11:02:08)
Отсутствует
Dumby
Точно не помню, но после того как слетел, никакие костыли не работали даже через config.js, пришлось с бекапа восстановить профиль... и вроде все папки в AppData удалял).
Вообще странно это, слетело так что я думал где-то что-то прописалось, хотя профиль портабельный. Вроде я 2 фф запустил, один с костылями другой без (случайно), думаю может еще в этом дело.
С тех пор пока сижу на config.js, ну раз пашет то поставлю этот способ, а тот закину на бекап.
И вообще по мне такой способ легче, чем через config.js? ну зачем все время править config.js или есть все таки различия?
Отредактировано func4ptch4 (31-08-2018 13:05:11)
Отсутствует
Кнопки видео в плеер(две независимые) Путь и названия - свои ! Типа:
var path = "C:\\PotPlayer\\PotPlayer.exe";
var addToPlaylistKey = "/add";
var sysPlayerName = "POTPlayer";
Да, берет только HTML5 (Mp4), HLS(TS) - не берет!, нужен скрипт в monkey - Inject2Download(version 0.2.8.3) Тогда через контекст.меню и в плеер!
И внимательно! Одна:
/*Initialization Code*/ var path = "C:\\PotPlayer\\PotPlayer.exe"; var addToPlaylistKey = "/add"; var sysPlayerName = "POTPlayer"; var openIn = "Откыть в "+sysPlayerName; var videoMoved = "Видео перенесено в "+sysPlayerName; var noFound = "Не найдено видео на странице, доступное для переноса в "+sysPlayerName; var Menu_n_TooltipTxts = [{ label: "Действие кнопки: Запустить видео сразу в "+sysPlayerName, radio: '', value: 'videotoplayer', tooltipTxt: 'Запустить видео сразу в '+sysPlayerName }, { label: "Действие кнопки: Перенести видео в плейлист "+sysPlayerName, radio: '', value: 'videotoplaylist', tooltipTxt: 'Перенести видео в плейлист '+sysPlayerName }, ]; var YoutubeID = /(?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})(?:\W|$)/; if(!(cbu.getPrefs("CB.videoout.action")) || cbu.getPrefs("CB.videoout.action").length < 9) cbu.setPrefs("CB.videoout.action", "videotoplayer"); var tmp = '', tmpp = '', innerA = '<div style="display:block!important;color:#00ff00!important;width:250px!important;font:bold 16px serif!important;z-index:999!important;opacity:1!important;visibility: visible!important;', innerB = 'left:5px!important;position:absolute!important;height:auto!important;box-sizing:border-box!important;padding:5px!important;margin:5px!important;', stopPl = "javascript:(function(){v=document.getElementById('movie_player');if(v){v.stopVideo()}else{v=document.getElementsByTagName('video');if(v){v[0].src='';try{v[0].load()}catch(e){}};}})();", ytIMGouter = function(ytID) {return '<div width="100%"><br /><a target="_blank" href="https://www.youtube.com/watch?v=' + ytID + '"><img src="https://i.ytimg.com/vi/' + ytID + '/hqdefault.jpg"></a><br />' + innerA + 'background-color:black!important;position:relative!important;bottom:20px!important;"> ' + videoMoved + '</div><br /></div><br />'}, handlWin = function(currentWin) { tmp = ''; var elem = currentWin.document.getElementsByTagName('video'), currLoc = currentWin.location; if(elem.length > 0) { if(currLoc.hostname.indexOf('youtu') != -1 && (tmp = currLoc.toString().match(YoutubeID)) && tmp[1].length == 11) { play(cbu.getPrefs("CB.videoout.action") == "videotoplaylist" ? 'https://www.youtube.com/embed/' + tmp[1] : 'https://www.youtube.com/watch?v=' + tmp[1]); videoMovedbox = currentWin.document.createElement('videoMoved'); videoMovedbox.innerHTML = innerA + innerB + 'top:-15px!important;"><b>' + videoMoved + '</b></div>'; loadURI(stopPl); currentWin.document.getElementById('eow-title').appendChild(videoMovedbox); return true; }; for(i = 0; i < elem.length; i++) { if(((tmp = getSrc(elem[i].parentNode, currLoc)) && tmp.length > 2) || (i == 0 && currentWin.document.body.innerHTML.substring(0, 7) == '<video ' && (tmp = currLoc.toString()))) { videoMovedbox = currentWin.document.createElement('videoMoved'); videoMovedbox.innerHTML = innerA + innerB + 'top:20px!important;background-color:black!important;">' + videoMoved + '</div>'; play(tmp); if(currLoc.hostname == 'www.youtube.com') { elem[i].parentNode.parentNode.appendChild(videoMovedbox); } else { elem[i].parentNode.appendChild(videoMovedbox); }; elem[i].src = ''; try { elem[i].load() } catch(e) {}; return true; } } }; currentWin._elems = currentWin.document.getElementsByTagName('iframe'); if(currentWin._elems.length > 0) { for(currentWin._iCounter = 0; currentWin._iCounter < currentWin._elems.length; currentWin._iCounter++) { if((currentWin._elems[currentWin._iCounter].src.indexOf('youtube.com') > -1) && (tmp = currentWin._elems[currentWin._iCounter].src.match(YoutubeID)) && (tmp[1].length == 11)) { play(cbu.getPrefs("CB.videoout.action") == "videotoplaylist" ? 'https://www.youtube.com/embed/' + tmp[1] : 'https://www.youtube.com/watch?v=' + tmp[1]); currentWin._elems[currentWin._iCounter].outerHTML = ytIMGouter(tmp[1]); return true; }; if(currentWin._elems[currentWin._iCounter].clientWidth > 80 && currentWin._elems[currentWin._iCounter].clientHeight > 40 && handlWin(currentWin._elems[currentWin._iCounter].contentWindow))return true; } }; elem = currentWin.document.getElementsByTagName('object'); currLoc = currentWin.location; if(elem.length == 0) { elem = currentWin.document.getElementsByTagName('embed') }; if(elem.length > 0) { for(i = 0; i < elem.length; i++) { if(elem[i].innerHTML.indexOf('youtu') != -1 && (tmp = elem[i].innerHTML.match(YoutubeID)) && tmp[1].length == 11) { play(cbu.getPrefs("CB.videoout.action") == "videotoplaylist" ? 'https://www.youtube.com/embed/' + tmp[1] : 'https://www.youtube.com/watch?v=' + tmp[1]); elem[i].outerHTML = ytIMGouter(tmp[1]); return true; } else { if(elem[i].clientWidth > 80 && elem[i].clientHeight > 40) { if(((tmp = getSrc(elem[i].parentNode, currLoc)) || (tmp = getLink(elem[i], currLoc))) && tmp.length > 2) { play(tmp); elem[i].outerHTML = innerA + 'background-color:black!important;bottom:20px!important;"> ' + videoMoved + '</div>'; return true; }; }; } }; }; return false; }; this.onclick = this.oncontextmenu = e => { if (e.target != this) return; if(e.button == 0) { if(cbu.getPrefs("CB.videoout.action").substring(0,6) == "videom"){ elem = content.document.getElementsByTagName('object'); if(elem.length == 0) { elem = content.document.getElementsByTagName('embed') }; resizeObjs(elem); resizeObjs(content.document.getElementsByTagName('iframe')); resizeObjs(content.document.getElementsByTagName('video')); } else { if(!handlWin(content))custombuttons.alertSlide1(noFound); } }; if(e.button == 1) gShowPopup(self); if(e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey) { e.preventDefault(); menu.showPopup(self, -1, -1, "popup", "bottomleft", "topleft"); } }; this.oncontextmenu = e => e.target != this ? menu.hasAttribute("context") : e.ctrlKey || e.shiftKey || e.altKey || e.metaKey || ( e.detail != 1 ? menu.hidePopup() : !!menu.openPopup(this, "after_start") ); custombuttons.alertSlide1 = function(sTitle) { var as = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService); as.showAlertNotification('chrome://global/skin/icons/information-16.png', "", sTitle, false, "", null); setTimeout(() => as.closeAlert(), 999); }; function resizeObjs(objs) { if(!objs) return; LEVELS = 3; dir = (cbu.getPrefs("CB.videoout.action") == "videomaximize") ? 1 : -1; for(i = 0; i < objs.length; i++) { var Width = new Array(LEVELS) var Height = new Array(LEVELS) Width[0] = objs[i].clientWidth; Height[0] = objs[i].clientHeight; if((Width[0] > (-20 * dir + 100)) && (Height[0] > (-20 * dir + 60))) { obj = objs[i]; for(var k = 1; ((k < LEVELS) && (obj.parentNode)); k++) { obj = obj.parentNode Width[k] = obj.clientWidth; Height[k] = obj.clientHeight; }; Width[0] = Width[0] + dir * (Width[0] / 5 | 0); Height[0] = Height[0] + dir * (Height[0] / 5 | 0); objs[i].style.width = Width[0] + "px"; objs[i].width = Width[0]; objs[i].style.height = Height[0] + "px"; objs[i].height = Height[0]; obj = objs[i]; for(var k = 1; ((k < LEVELS) && !(objs[i].tagName == 'IFRAME') && (obj.parentNode) && (Width[k]) && (Height[k]) && (Width[k] > (-20 * dir + 100)) && (Height[k] > (-20 * dir + 60))); k++) { obj = obj.parentNode Width[k] = Width[k] + dir * (Width[k] / 5 | 0); Height[k] = Height[k] + dir * (Height[k] / 5 | 0); obj.style.width = Width[k] + "px"; obj.width = Width[k]; obj.style.height = Height[k] + "px"; obj.height = Height[k]; } } }; }; function restProtHost(lnkR, curLoc) { if(lnkR.length==0)return ''; let tr = lnkR.replace(/^:\/\//, curLoc.protocol + "//"); if(!tr.match(/^https?:\/\//i)){ lnkR = tr.replace(/^\/+/, ''); if(lnkR.split('/')[0].split('?')[0].split('#')[0].toLowerCase().match(/^(?:[-a-z\d]+\.)+[a-z\d]{2,6}$/)){ tr = curLoc.protocol + '//' + lnkR; }else{ tr = curLoc.protocol + '//' + curLoc.host + "/" + lnkR; } }; return tr; }; function getSrc(vobj, currentLoc) { var t = '', tt = ''; if((((t = vobj.innerHTML.match(/<video.*?\ssrc=(?:(?:'([^']*)')|(?:"([^"]*)")|([^\s]*))/i)) && (t) && (tt = t[1] || t[2] || t[3]) && tt.indexOf('blob:') == -1 ) || ((t = vobj.innerHTML.match(/<source.*?\ssrc=(?:(?:'([^']*)')|(?:"([^"]*)")|([^\s]*)).*?\stype=['"]?video\//i)) && (t) && (tt = t[1] || t[2] || t[3]))) && tt.length > 2 && tt.indexOf('blob:') == -1 ) { if(tt.indexOf(".mp4/?") == -1) { tt = tt.replace(/&/g, "&") }; t = restProtHost(tt, currentLoc); return t; }; return ''; }; function getLink(obj, curLocation) { if(!obj || !obj.tagName) return ''; var flashvars = '', // src = '', q = obj.tagName.toLowerCase(); var getParam = function(e, n) { var v = '', r = new RegExp('^(' + n + ')$', 'i'), param = e.getElementsByTagName('param'); for(var igp = 0, p; p = param[igp]; igp++) { if(p.hasAttribute('name') && p.getAttribute('name').match(r)) { v = p.getAttribute('value'); break }; }; return v; }; if(q == 'object') { // src = obj.getAttribute('data') || obj.getAttribute('src') || getParam(obj, 'movie|data|src|code|filename|url') || (obj.getElementsByTagName('embed').length > 0 ? obj.getElementsByTagName('embed')[0].getAttribute('src') : ''); flashvars = getParam(obj, 'flashvars'); } else if(q == 'embed') { // src = obj.getAttribute('src'); flashvars = obj.getAttribute('flashvars'); } else return ''; if(!flashvars) return ''; // src = restProtHost(src, curLocation); var restPath = function(f, s) { return(f.substring(0, 4) == 'http') ? f : s.replace(/[#?].*$/, '').replace(/[^\/]*$/, f) }; function videoLinkExtract(fl) { //alert(fl); var linkArr = [], outLinks = [], jj = 0, lba = '', lbb = '', decodeURL = function(s) { try { return decodeURIComponent(s) } catch(e) { return unescape(s) } }; for(var ij = 0; ij < 3; ij++) { lba = lba + String.fromCharCode(parseInt((Math.random() * 15 + 1) + '', 10)); lbb = lbb + String.fromCharCode(parseInt((Math.random() * 15 + 16) + '', 10)); }; function pushWithMerit(lnk) { var merit = -11; if(lnk.match(/^https?:\/\//i)) merit = merit + 40; if(outLinks.length == 0) merit = merit + 1; if(lnk.match(/^\//)) merit = merit + 7; if(lnk.match(/^\/\//)) merit = merit + 30; if(lnk.match(/240p([^a-z]|$)/i)) merit = merit + 1; if(lnk.match(/[^a-z]240([^a-z0-9]|$)/i)) merit = merit + 1; if(lnk.match(/360p([^a-z]|$)/i)) merit = merit + 3; if(lnk.match(/[^a-z]360([^a-z0-9]|$)/i)) merit = merit + 3; if(lnk.match(/480p([^a-z]|$)/i)) merit = merit + 5; if(lnk.match(/[^a-z]480([^a-z0-9]|$)/i)) merit = merit + 5; if(lnk.match(/720p([^a-z]|$)/i)) merit = merit + 7; if(lnk.match(/[^a-z]720([^a-z0-9]|$)/i)) merit = merit + 7; if(lnk.match(/\.mp4([^a-z]|$)/i)) merit = merit + 8; if(lnk.match(/_hd([^a-z]|$)/i)) merit = merit + 6; if(lnk.match(/\.(jpg|xml)([^a-z]|$)/i)) merit = merit - 40; if(merit > 0) outLinks.push(merit + lba + lnk); Services.console.logStringMessage('merit:'+merit+' lnk->'+lnk); }; linkArr.push(fl); while(linkArr.length > jj && jj < 30) { var testPaths = []; testPaths = linkArr[jj].split(/(\.(?:flv|mp4|m3u8))/i); if(testPaths[testPaths.length - 1] == '') testPaths.pop(); for(k = 1; k < testPaths.length; k = k + 2) { if(testPaths[k - 1].indexOf(lba) > -1) { pref = testPaths[k - 1]; } else { var testAboutDom = testPaths[k - 1].toLowerCase().split(/(https?:\/\/)/); if(testAboutDom[testAboutDom.length - 1]=='') testAboutDom.pop(); var pTest = testAboutDom[testAboutDom.length - 1].split(/(\?[^\?]*?&)/); if(pTest.length>2){ pTest.pop(); pTest.pop(); }; testAboutDom[testAboutDom.length - 1] = pTest.join(''); pref = testPaths[k - 1].substring(testAboutDom.join('').lastIndexOf("&") + 1); }; t2 = pref.lastIndexOf(lbb); if(t2 > -1) { pref = pref.substring(t2 + 3); } else { t2 = pref.lastIndexOf('{"'); if(t2 > -1) pref = pref.substring(t2 + 2); t2 = pref.lastIndexOf('["'); if(t2 > -1) pref = pref.substring(t2 + 2); t2 = pref.lastIndexOf(',"'); if(t2 > -1) pref = pref.substring(t2 + 2); t2 = pref.toLowerCase().lastIndexOf('"http://'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf('"https://'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(',http://'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(',https://'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(';http'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf('*https://'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(' or '); if(t2 > -1) pref = pref.substring(t2 + 4); pref = pref.substring(pref.split('/')[0].toLowerCase().split('%2f')[0].lastIndexOf('=') + 1); } if(pref.length > 0) { if(pref.split('?')[0].toLowerCase().match(/%[2-3][0-9a-f]/)) { t2 = pref.indexOf('"') if(t2 > -1) pref = pref.substring(t2 + 1); suff = testPaths[k + 1] ? testPaths[k + 1].split('&')[0].split('"')[0].split(';')[0].split(/,http/i)[0] : ''; if((suff != testPaths[k + 1]) || (testPaths.length < k + 3)) { if(testPaths.length > k + 1) { testPaths[k + 1] = ((pref == testPaths[k - 1]) ? '' : '&') + testPaths[k + 1].substr(suff.length) }; t2 = pref.lastIndexOf(lba); if(t2 > -1) pref = pref.substring(t2 + 3) linkArr.push(decodeURL(pref + testPaths[k] + suff)); } else { testPaths[k + 1] = (pref == testPaths[k - 1] ? '' : lbb) + pref + testPaths[k] + suff } } else { suff = testPaths[k + 1] ? testPaths[k + 1].split(';')[0].split('"]')[0].split('"}')[0].split('",')[0].split(/,https?:\/\//i)[0].split('*https://')[0].split(' or ')[0] : ''; t2 = suff.indexOf('&'); if((t2 > -1) && (pref != testPaths[k - 1])) { if(t2 == 0) suff = ''; if(suff.charAt(0) != '?') suff = suff.split(/(&[^&]+=https?:\/\/)/i)[0]; }; if((suff != testPaths[k + 1]) || (testPaths.length < k + 3)) { if(testPaths.length > k + 1) { testPaths[k + 1] = ((pref == testPaths[k - 1]) ? '' : '&') + testPaths[k + 1].substr(suff.length) }; t2 = pref.lastIndexOf(lba); if(t2 > -1) pref = pref.substring(t2 + 3); pushWithMerit(pref + testPaths[k] + suff); } else { testPaths[k + 1] = lba + (pref == testPaths[k - 1] ? '' : lbb) + pref + testPaths[k] + suff } } } }; jj = jj + 1; }; if(outLinks.length == 0) return ''; function srt(a, b) { a = parseInt(a.substr(0, a.indexOf(lba)), 10); b = parseInt(b.substr(0, b.indexOf(lba)), 10); if(a < b) return 1; if(a > b) return -1; return 0 }; outLinks.sort(srt); outLinks[0] = outLinks[0].substr(outLinks[0].indexOf(lba) + 3) if(outLinks[0].indexOf('_hq.mp4/?time=') > 0) outLinks[0] = outLinks[0].replace(/&/g, '&'); return outLinks[0]; }; ol = videoLinkExtract(flashvars); if(!ol) return ''; // ol = ol.replace(/^:?\/\//, curLocation.protocol + "//"); // return restPath(ol, src); return restProtHost(ol, curLocation); }; var menu = self.appendChild(document.createElement("menupopup")); self.image = "moz-icon://file://" + path; var playerName = path.split("\\").pop().replace(".exe",""); self.label = "Открыть видео в " +sysPlayerName; setTimeout(() => { Menu_n_TooltipTxts.forEach((m) => { if("separator" in m) { menu.appendChild(document.createElement("menuseparator")); return }; var mItem = document.createElement("menuitem"); mItem.setAttribute("label", m.label); if("radio" in m) { mItem.setAttribute("type", "radio"); mItem.setAttribute('checked', cbu.getPrefs("CB.videoout.action") == m.value); if(cbu.getPrefs("CB.videoout.action") == m.value) { self.tooltipText = m.tooltipTxt; } mItem.onclick = () => { cbu.setPrefs("CB.videoout.action", m.value); tmp = (self.image == imgFlashToPlayer || self.image == imgFlashMinimize || self.image == imgFlashMaximize); if(m.value.substring(0,9)=='videotopl'){ self.image = tmp ? imgFlashToPlayer : imgHTML5ToPlayer; } else if(m.value=='videominimize') { self.image = tmp ? imgFlashMinimize : imgHTML5Minimize; } else self.image = tmp ? imgFlashMaximize : imgHTML5Maximize; self.tooltipText = m.tooltipTxt; }; } if("checkbox" in m) { mItem.setAttribute('type', 'checkbox'); mItem.setAttribute('checked', (self.image == imgFlashToPlayer || self.image == imgFlashMinimize || self.image == imgFlashMaximize )); mItem.onclick = function(e) { e.stopPropagation(); e.preventDefault(); if(e.button == 0) toggleFlash(); } } menu.appendChild(mItem); }); menu.onclick = function(e) { e.stopPropagation(); if(e.button > 0) e.preventDefault(); }; }, 100); var contextMenu = document.getElementById("contentAreaContextMenu"); var menuitem = contextMenu.insertBefore(document.createElement("menuitem"), document.getElementById("context-sep-open")); menuitem.setAttribute("label", "Открыть в " +sysPlayerName); menuitem.setAttribute("class", "menuitem-iconic"); menuitem.setAttribute("image", "moz-icon://file://" + path); menuitem.onclick = () => play(gContextMenu.linkURL); addEventListener("popupshowing", ()=> menuitem.hidden = !gContextMenu.onLink, false, contextMenu); addDestructor(()=> menuitem.remove() ); var contextMenu = document.getElementById("contentAreaContextMenu"); var mItem = contextMenu.insertBefore(document.createElement("menuitem"), document.getElementById("context-copyvideourl")); mItem.setAttribute("label", openIn); mItem.onclick = () => { var vurl = gContextMenu.mediaURL, videoelem = gContextMenu.target; if(videoelem && videoelem.nodeName.toLowerCase() == 'video') { if(content.location.hostname.indexOf('youtu') != -1 && (tmp = content.location.toString().match(YoutubeID)) && tmp[1].length == 11) { play(vurl); videoMovedbox = content.document.createElement('videoMoved'); videoMovedbox.innerHTML = innerA + innerB + 'top:-15px!important;"><b>' + videoMoved + '</b></div>'; loadURI(stopPl); content.document.getElementById('eow-title').appendChild(videoMovedbox); return; }; if(content.location.hostname == 'www.youtube.com') { videoelem.parentNode.parentNode.appendChild(videoMovedbox); } else { var inFrameHref = inFrameWin.location.href, found = false; if(inFrameWin.location.hostname == 'www.youtube.com' && (tmp = inFrameHref.match(YoutubeID)) && tmp[1].length == 11){//и значит во фрейме elem = inFrameWin.parent.document.getElementsByTagName('iframe'); if(elem.length > 0) { for(i = 0; i < elem.length; i++) { if(elem[i].contentWindow == inFrameWin) { elem[i].outerHTML = ytIMGouter(tmp[1]); found = true; break; }; }; }; if(!found)inFrameWin.document.body.innerHTML = ytIMGouter(tmp[1]); return; }; videoelem.parentNode.appendChild(videoMovedbox); }; videoelem.src = ''; try { videoelem.load() } catch(e) {}; } else play(vurl); }; addEventListener("popupshowing", () => { mItem.hidden = !gContextMenu.onVideo || !gContextMenu.mediaURL; mItem2.hidden = !gContextMenu.linkURL; mItem3.hidden = framItem.hidden || gContextMenu.target.ownerDocument.location.hostname.indexOf('youtube.com') == -1; }, false, contextMenu); addDestructor(() => {mItem.remove();mItem2.remove();mItem3.remove()}); function play(link) { var file = Services.dirsvc.get('CurProcD', Ci.nsIFile); var MozExeDir = file.path.split('\\').slice(0,-1).join('\\'); file.initWithPath(path); if(!file.exists()) { custombuttons.alertBox("File not found!", MozExeDir + Path); return; }; var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); process.run(false, [link, cbu.getPrefs("CB.videoout.action") == "videotoplaylist" ? addToPlaylistKey : ""], 2); };
/*Initialization Code*/ var path = "D:\\GOMPlayer\\GOM.exe"; var addToPlaylistKey = "/add"; var sysPlayerName = "GOMlayer"; var openIn = "Откыть в "+sysPlayerName; var videoMoved = "Видео перенесено в "+sysPlayerName; var noFound = "Не найдено видео на странице, доступное для переноса в "+sysPlayerName; var Menu_n_TooltipTxts = [{ label: "Действие кнопки: Запустить видео сразу в "+sysPlayerName, radio: '', value: 'videotoplayer', tooltipTxt: 'Запустить видео сразу в '+sysPlayerName }, { label: "Действие кнопки: Перенести видео в плейлист "+sysPlayerName, radio: '', value: 'videotoplaylist', tooltipTxt: 'Перенести видео в плейлист '+sysPlayerName }, ]; var YoutubeID = /(?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})(?:\W|$)/; if(!(cbu.getPrefs("CB.videoout")) || cbu.getPrefs("CB.videoout").length < 9) cbu.setPrefs("CB.videoout", "videotoplayer"); var tmp = '', tmpp = '', innerA = '<div style="display:block!important;color:#00ff00!important;width:250px!important;font:bold 16px serif!important;z-index:999!important;opacity:1!important;visibility: visible!important;', innerB = 'left:5px!important;position:absolute!important;height:auto!important;box-sizing:border-box!important;padding:5px!important;margin:5px!important;', stopPl = "javascript:(function(){v=document.getElementById('movie_player');if(v){v.stopVideo()}else{v=document.getElementsByTagName('video');if(v){v[0].src='';try{v[0].load()}catch(e){}};}})();", ytIMGouter = function(ytID) {return '<div width="100%"><br /><a target="_blank" href="https://www.youtube.com/watch?v=' + ytID + '"><img src="https://i.ytimg.com/vi/' + ytID + '/hqdefault.jpg"></a><br />' + innerA + 'background-color:black!important;position:relative!important;bottom:20px!important;"> ' + videoMoved + '</div><br /></div><br />'}, handlWin = function(currentWin) { tmp = ''; var elem = currentWin.document.getElementsByTagName('video'), currLoc = currentWin.location; if(elem.length > 0) { if(currLoc.hostname.indexOf('youtu') != -1 && (tmp = currLoc.toString().match(YoutubeID)) && tmp[1].length == 11) { play(cbu.getPrefs("CB.videoout") == "videotoplaylist" ? 'https://www.youtube.com/embed/' + tmp[1] : 'https://www.youtube.com/watch?v=' + tmp[1]); videoMovedbox = currentWin.document.createElement('videoMoved'); videoMovedbox.innerHTML = innerA + innerB + 'top:-15px!important;"><b>' + videoMoved + '</b></div>'; loadURI(stopPl); currentWin.document.getElementById('eow-title').appendChild(videoMovedbox); return true; }; for(i = 0; i < elem.length; i++) { if(((tmp = getSrc(elem[i].parentNode, currLoc)) && tmp.length > 2) || (i == 0 && currentWin.document.body.innerHTML.substring(0, 7) == '<video ' && (tmp = currLoc.toString()))) { videoMovedbox = currentWin.document.createElement('videoMoved'); videoMovedbox.innerHTML = innerA + innerB + 'top:20px!important;background-color:black!important;">' + videoMoved + '</div>'; play(tmp); if(currLoc.hostname == 'www.youtube.com') { elem[i].parentNode.parentNode.appendChild(videoMovedbox); } else { elem[i].parentNode.appendChild(videoMovedbox); }; elem[i].src = ''; try { elem[i].load() } catch(e) {}; return true; } } }; currentWin._elems = currentWin.document.getElementsByTagName('iframe'); if(currentWin._elems.length > 0) { for(currentWin._iCounter = 0; currentWin._iCounter < currentWin._elems.length; currentWin._iCounter++) { if((currentWin._elems[currentWin._iCounter].src.indexOf('youtube.com') > -1) && (tmp = currentWin._elems[currentWin._iCounter].src.match(YoutubeID)) && (tmp[1].length == 11)) { play(cbu.getPrefs("CB.videoout") == "videotoplaylist" ? 'https://www.youtube.com/embed/' + tmp[1] : 'https://www.youtube.com/watch?v=' + tmp[1]); currentWin._elems[currentWin._iCounter].outerHTML = ytIMGouter(tmp[1]); return true; }; if(currentWin._elems[currentWin._iCounter].clientWidth > 80 && currentWin._elems[currentWin._iCounter].clientHeight > 40 && handlWin(currentWin._elems[currentWin._iCounter].contentWindow))return true; } }; elem = currentWin.document.getElementsByTagName('object'); currLoc = currentWin.location; if(elem.length == 0) { elem = currentWin.document.getElementsByTagName('embed') }; if(elem.length > 0) { for(i = 0; i < elem.length; i++) { if(elem[i].innerHTML.indexOf('youtu') != -1 && (tmp = elem[i].innerHTML.match(YoutubeID)) && tmp[1].length == 11) { play(cbu.getPrefs("CB.videoout") == "videotoplaylist" ? 'https://www.youtube.com/embed/' + tmp[1] : 'https://www.youtube.com/watch?v=' + tmp[1]); elem[i].outerHTML = ytIMGouter(tmp[1]); return true; } else { if(elem[i].clientWidth > 80 && elem[i].clientHeight > 40) { if(((tmp = getSrc(elem[i].parentNode, currLoc)) || (tmp = getLink(elem[i], currLoc))) && tmp.length > 2) { play(tmp); elem[i].outerHTML = innerA + 'background-color:black!important;bottom:20px!important;"> ' + videoMoved + '</div>'; return true; }; }; } }; }; return false; }; this.onclick = this.oncontextmenu = e => { if (e.target != this) return; if(e.button == 0) { if(cbu.getPrefs("CB.videoout").substring(0,6) == "videom"){ elem = content.document.getElementsByTagName('object'); if(elem.length == 0) { elem = content.document.getElementsByTagName('embed') }; resizeObjs(elem); resizeObjs(content.document.getElementsByTagName('iframe')); resizeObjs(content.document.getElementsByTagName('video')); } else { if(!handlWin(content))custombuttons.alertSlide1(noFound); } }; if(e.button == 1) gShowPopup(self); if(e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey) { e.preventDefault(); menu.showPopup(self, -1, -1, "popup", "bottomleft", "topleft"); } }; this.oncontextmenu = e => e.target != this ? menu.hasAttribute("context") : e.ctrlKey || e.shiftKey || e.altKey || e.metaKey || ( e.detail != 1 ? menu.hidePopup() : !!menu.openPopup(this, "after_start") ); custombuttons.alertSlide1 = function(sTitle) { var as = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService); as.showAlertNotification('chrome://global/skin/icons/information-16.png', "", sTitle, false, "", null); setTimeout(() => as.closeAlert(), 999); }; function resizeObjs(objs) { if(!objs) return; LEVELS = 3; dir = (cbu.getPrefs("CB.videoout") == "videomaximize") ? 1 : -1; for(i = 0; i < objs.length; i++) { var Width = new Array(LEVELS) var Height = new Array(LEVELS) Width[0] = objs[i].clientWidth; Height[0] = objs[i].clientHeight; if((Width[0] > (-20 * dir + 100)) && (Height[0] > (-20 * dir + 60))) { obj = objs[i]; for(var k = 1; ((k < LEVELS) && (obj.parentNode)); k++) { obj = obj.parentNode Width[k] = obj.clientWidth; Height[k] = obj.clientHeight; }; Width[0] = Width[0] + dir * (Width[0] / 5 | 0); Height[0] = Height[0] + dir * (Height[0] / 5 | 0); objs[i].style.width = Width[0] + "px"; objs[i].width = Width[0]; objs[i].style.height = Height[0] + "px"; objs[i].height = Height[0]; obj = objs[i]; for(var k = 1; ((k < LEVELS) && !(objs[i].tagName == 'IFRAME') && (obj.parentNode) && (Width[k]) && (Height[k]) && (Width[k] > (-20 * dir + 100)) && (Height[k] > (-20 * dir + 60))); k++) { obj = obj.parentNode Width[k] = Width[k] + dir * (Width[k] / 5 | 0); Height[k] = Height[k] + dir * (Height[k] / 5 | 0); obj.style.width = Width[k] + "px"; obj.width = Width[k]; obj.style.height = Height[k] + "px"; obj.height = Height[k]; } } }; }; function restProtHost(lnkR, curLoc) { if(lnkR.length==0)return ''; let tr = lnkR.replace(/^:\/\//, curLoc.protocol + "//"); if(!tr.match(/^https?:\/\//i)){ lnkR = tr.replace(/^\/+/, ''); if(lnkR.split('/')[0].split('?')[0].split('#')[0].toLowerCase().match(/^(?:[-a-z\d]+\.)+[a-z\d]{2,6}$/)){ tr = curLoc.protocol + '//' + lnkR; }else{ tr = curLoc.protocol + '//' + curLoc.host + "/" + lnkR; } }; return tr; }; function getSrc(vobj, currentLoc) { var t = '', tt = ''; if((((t = vobj.innerHTML.match(/<video.*?\ssrc=(?:(?:'([^']*)')|(?:"([^"]*)")|([^\s]*))/i)) && (t) && (tt = t[1] || t[2] || t[3]) && tt.indexOf('blob:') == -1 ) || ((t = vobj.innerHTML.match(/<source.*?\ssrc=(?:(?:'([^']*)')|(?:"([^"]*)")|([^\s]*)).*?\stype=['"]?video\//i)) && (t) && (tt = t[1] || t[2] || t[3]))) && tt.length > 2 && tt.indexOf('blob:') == -1 ) { if(tt.indexOf(".mp4/?") == -1) { tt = tt.replace(/&/g, "&") }; t = restProtHost(tt, currentLoc); return t; }; return ''; }; function getLink(obj, curLocation) { if(!obj || !obj.tagName) return ''; var flashvars = '', // src = '', q = obj.tagName.toLowerCase(); var getParam = function(e, n) { var v = '', r = new RegExp('^(' + n + ')$', 'i'), param = e.getElementsByTagName('param'); for(var igp = 0, p; p = param[igp]; igp++) { if(p.hasAttribute('name') && p.getAttribute('name').match(r)) { v = p.getAttribute('value'); break }; }; return v; }; if(q == 'object') { // src = obj.getAttribute('data') || obj.getAttribute('src') || getParam(obj, 'movie|data|src|code|filename|url') || (obj.getElementsByTagName('embed').length > 0 ? obj.getElementsByTagName('embed')[0].getAttribute('src') : ''); flashvars = getParam(obj, 'flashvars'); } else if(q == 'embed') { // src = obj.getAttribute('src'); flashvars = obj.getAttribute('flashvars'); } else return ''; if(!flashvars) return ''; // src = restProtHost(src, curLocation); var restPath = function(f, s) { return(f.substring(0, 4) == 'http') ? f : s.replace(/[#?].*$/, '').replace(/[^\/]*$/, f) }; function videoLinkExtract(fl) { //alert(fl); var linkArr = [], outLinks = [], jj = 0, lba = '', lbb = '', decodeURL = function(s) { try { return decodeURIComponent(s) } catch(e) { return unescape(s) } }; for(var ij = 0; ij < 3; ij++) { lba = lba + String.fromCharCode(parseInt((Math.random() * 15 + 1) + '', 10)); lbb = lbb + String.fromCharCode(parseInt((Math.random() * 15 + 16) + '', 10)); }; function pushWithMerit(lnk) { var merit = -11; if(lnk.match(/^https?:\/\//i)) merit = merit + 40; if(outLinks.length == 0) merit = merit + 1; if(lnk.match(/^\//)) merit = merit + 7; if(lnk.match(/^\/\//)) merit = merit + 30; if(lnk.match(/240p([^a-z]|$)/i)) merit = merit + 1; if(lnk.match(/[^a-z]240([^a-z0-9]|$)/i)) merit = merit + 1; if(lnk.match(/360p([^a-z]|$)/i)) merit = merit + 3; if(lnk.match(/[^a-z]360([^a-z0-9]|$)/i)) merit = merit + 3; if(lnk.match(/480p([^a-z]|$)/i)) merit = merit + 5; if(lnk.match(/[^a-z]480([^a-z0-9]|$)/i)) merit = merit + 5; if(lnk.match(/720p([^a-z]|$)/i)) merit = merit + 7; if(lnk.match(/[^a-z]720([^a-z0-9]|$)/i)) merit = merit + 7; if(lnk.match(/\.mp4([^a-z]|$)/i)) merit = merit + 8; if(lnk.match(/_hd([^a-z]|$)/i)) merit = merit + 6; if(lnk.match(/\.(jpg|xml)([^a-z]|$)/i)) merit = merit - 40; if(merit > 0) outLinks.push(merit + lba + lnk); Services.console.logStringMessage('merit:'+merit+' lnk->'+lnk); }; linkArr.push(fl); while(linkArr.length > jj && jj < 30) { var testPaths = []; testPaths = linkArr[jj].split(/(\.(?:flv|mp4|m3u8))/i); if(testPaths[testPaths.length - 1] == '') testPaths.pop(); for(k = 1; k < testPaths.length; k = k + 2) { if(testPaths[k - 1].indexOf(lba) > -1) { pref = testPaths[k - 1]; } else { var testAboutDom = testPaths[k - 1].toLowerCase().split(/(https?:\/\/)/); if(testAboutDom[testAboutDom.length - 1]=='') testAboutDom.pop(); var pTest = testAboutDom[testAboutDom.length - 1].split(/(\?[^\?]*?&)/); if(pTest.length>2){ pTest.pop(); pTest.pop(); }; testAboutDom[testAboutDom.length - 1] = pTest.join(''); pref = testPaths[k - 1].substring(testAboutDom.join('').lastIndexOf("&") + 1); }; t2 = pref.lastIndexOf(lbb); if(t2 > -1) { pref = pref.substring(t2 + 3); } else { t2 = pref.lastIndexOf('{"'); if(t2 > -1) pref = pref.substring(t2 + 2); t2 = pref.lastIndexOf('["'); if(t2 > -1) pref = pref.substring(t2 + 2); t2 = pref.lastIndexOf(',"'); if(t2 > -1) pref = pref.substring(t2 + 2); t2 = pref.toLowerCase().lastIndexOf('"http://'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf('"https://'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(',http://'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(',https://'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(';http'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf('*https://'); if(t2 > -1) pref = pref.substring(t2 + 1); t2 = pref.toLowerCase().lastIndexOf(' or '); if(t2 > -1) pref = pref.substring(t2 + 4); pref = pref.substring(pref.split('/')[0].toLowerCase().split('%2f')[0].lastIndexOf('=') + 1); } if(pref.length > 0) { if(pref.split('?')[0].toLowerCase().match(/%[2-3][0-9a-f]/)) { t2 = pref.indexOf('"') if(t2 > -1) pref = pref.substring(t2 + 1); suff = testPaths[k + 1] ? testPaths[k + 1].split('&')[0].split('"')[0].split(';')[0].split(/,http/i)[0] : ''; if((suff != testPaths[k + 1]) || (testPaths.length < k + 3)) { if(testPaths.length > k + 1) { testPaths[k + 1] = ((pref == testPaths[k - 1]) ? '' : '&') + testPaths[k + 1].substr(suff.length) }; t2 = pref.lastIndexOf(lba); if(t2 > -1) pref = pref.substring(t2 + 3) linkArr.push(decodeURL(pref + testPaths[k] + suff)); } else { testPaths[k + 1] = (pref == testPaths[k - 1] ? '' : lbb) + pref + testPaths[k] + suff } } else { suff = testPaths[k + 1] ? testPaths[k + 1].split(';')[0].split('"]')[0].split('"}')[0].split('",')[0].split(/,https?:\/\//i)[0].split('*https://')[0].split(' or ')[0] : ''; t2 = suff.indexOf('&'); if((t2 > -1) && (pref != testPaths[k - 1])) { if(t2 == 0) suff = ''; if(suff.charAt(0) != '?') suff = suff.split(/(&[^&]+=https?:\/\/)/i)[0]; }; if((suff != testPaths[k + 1]) || (testPaths.length < k + 3)) { if(testPaths.length > k + 1) { testPaths[k + 1] = ((pref == testPaths[k - 1]) ? '' : '&') + testPaths[k + 1].substr(suff.length) }; t2 = pref.lastIndexOf(lba); if(t2 > -1) pref = pref.substring(t2 + 3); pushWithMerit(pref + testPaths[k] + suff); } else { testPaths[k + 1] = lba + (pref == testPaths[k - 1] ? '' : lbb) + pref + testPaths[k] + suff } } } }; jj = jj + 1; }; if(outLinks.length == 0) return ''; function srt(a, b) { a = parseInt(a.substr(0, a.indexOf(lba)), 10); b = parseInt(b.substr(0, b.indexOf(lba)), 10); if(a < b) return 1; if(a > b) return -1; return 0 }; outLinks.sort(srt); outLinks[0] = outLinks[0].substr(outLinks[0].indexOf(lba) + 3) if(outLinks[0].indexOf('_hq.mp4/?time=') > 0) outLinks[0] = outLinks[0].replace(/&/g, '&'); return outLinks[0]; }; ol = videoLinkExtract(flashvars); if(!ol) return ''; // ol = ol.replace(/^:?\/\//, curLocation.protocol + "//"); // return restPath(ol, src); return restProtHost(ol, curLocation); }; var menu = self.appendChild(document.createElement("menupopup")); self.image = "moz-icon://file://" + path; var playerName = path.split("\\").pop().replace(".exe",""); self.label = "Открыть видео в " +sysPlayerName; setTimeout(() => { Menu_n_TooltipTxts.forEach((m) => { if("separator" in m) { menu.appendChild(document.createElement("menuseparator")); return }; var mItem = document.createElement("menuitem"); mItem.setAttribute("label", m.label); if("radio" in m) { mItem.setAttribute("type", "radio"); mItem.setAttribute('checked', cbu.getPrefs("CB.videoout") == m.value); if(cbu.getPrefs("CB.videoout") == m.value) { self.tooltipText = m.tooltipTxt; } mItem.onclick = () => { cbu.setPrefs("CB.videoout", m.value); tmp = (self.image == imgFlashToPlayer || self.image == imgFlashMinimize || self.image == imgFlashMaximize); if(m.value.substring(0,9)=='videotopl'){ self.image = tmp ? imgFlashToPlayer : imgHTML5ToPlayer; } else if(m.value=='videominimize') { self.image = tmp ? imgFlashMinimize : imgHTML5Minimize; } else self.image = tmp ? imgFlashMaximize : imgHTML5Maximize; self.tooltipText = m.tooltipTxt; }; } if("checkbox" in m) { mItem.setAttribute('type', 'checkbox'); mItem.setAttribute('checked', (self.image == imgFlashToPlayer || self.image == imgFlashMinimize || self.image == imgFlashMaximize )); mItem.onclick = function(e) { e.stopPropagation(); e.preventDefault(); if(e.button == 0) toggleFlash(); } } menu.appendChild(mItem); }); menu.onclick = function(e) { e.stopPropagation(); if(e.button > 0) e.preventDefault(); }; }, 100); var contextMenu = document.getElementById("contentAreaContextMenu"); var menuitem = contextMenu.insertBefore(document.createElement("menuitem"), document.getElementById("context-sep-open")); menuitem.setAttribute("label", "Открыть в " +sysPlayerName); menuitem.setAttribute("class", "menuitem-iconic"); menuitem.setAttribute("image", "moz-icon://file://" + path); menuitem.onclick = () => play(gContextMenu.linkURL); addEventListener("popupshowing", ()=> menuitem.hidden = !gContextMenu.onLink, false, contextMenu); addDestructor(()=> menuitem.remove() ); var contextMenu = document.getElementById("contentAreaContextMenu"); var mItem = contextMenu.insertBefore(document.createElement("menuitem"), document.getElementById("context-copyvideourl")); mItem.setAttribute("label", openIn); mItem.onclick = () => { var vurl = gContextMenu.mediaURL, videoelem = gContextMenu.target; if(videoelem && videoelem.nodeName.toLowerCase() == 'video') { if(content.location.hostname.indexOf('youtu') != -1 && (tmp = content.location.toString().match(YoutubeID)) && tmp[1].length == 11) { play(vurl); videoMovedbox = content.document.createElement('videoMoved'); videoMovedbox.innerHTML = innerA + innerB + 'top:-15px!important;"><b>' + videoMoved + '</b></div>'; loadURI(stopPl); content.document.getElementById('eow-title').appendChild(videoMovedbox); return; }; if(content.location.hostname == 'www.youtube.com') { videoelem.parentNode.parentNode.appendChild(videoMovedbox); } else { var inFrameHref = inFrameWin.location.href, found = false; if(inFrameWin.location.hostname == 'www.youtube.com' && (tmp = inFrameHref.match(YoutubeID)) && tmp[1].length == 11){//и значит во фрейме elem = inFrameWin.parent.document.getElementsByTagName('iframe'); if(elem.length > 0) { for(i = 0; i < elem.length; i++) { if(elem[i].contentWindow == inFrameWin) { elem[i].outerHTML = ytIMGouter(tmp[1]); found = true; break; }; }; }; if(!found)inFrameWin.document.body.innerHTML = ytIMGouter(tmp[1]); return; }; videoelem.parentNode.appendChild(videoMovedbox); }; videoelem.src = ''; try { videoelem.load() } catch(e) {}; } else play(vurl); }; addEventListener("popupshowing", () => { mItem.hidden = !gContextMenu.onVideo || !gContextMenu.mediaURL; mItem2.hidden = !gContextMenu.linkURL; mItem3.hidden = framItem.hidden || gContextMenu.target.ownerDocument.location.hostname.indexOf('youtube.com') == -1; }, false, contextMenu); addDestructor(() => {mItem.remove();mItem2.remove();mItem3.remove()}); function play(link) { var file = Services.dirsvc.get('CurProcD', Ci.nsIFile); var MozExeDir = file.path.split('\\').slice(0,-1).join('\\'); file.initWithPath(path); if(!file.exists()) { custombuttons.alertBox("File not found!", MozExeDir + Path); return; }; var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); process.run(false, [link, cbu.getPrefs("CB.videoout") == "videotoplaylist" ? addToPlaylistKey : ""], 2); };
Отредактировано drage2 (31-08-2018 14:20:59)
Отсутствует
Одно замечание скрипт Inject2Download(version 0.2.8.3) не пашет, если включен RU AdList JS Fixes.
Отсутствует
drage2
Спасибо за оскорбление, а так я наверно у себя проверял чтобы прогонять фуфло?... у меня не работает, снова проверил на nnm-club, на coub тоже самое.
И да если умеете править omni.ja, это не значит что все вокруг говно а вы дартаньян.
Можно и повежлевее обращаться типа у меня вот так, тогда бы я посмотрел у себя и т.д. Но вам надо показать какой вы из себя весь.
Отредактировано func4ptch4 (31-08-2018 23:17:28)
Отсутствует
Inject2Download(version 0.2.8.3) не пашет, если включен RU AdList JS Fixes.
Передергивать не надо, на RuTube не работает, прием тут RU AdList JS Fixes ?
И на Vimeo тоже, хрен ли сайты перечислять, начал за Фому и передернул на Ерёму, что за гнилой подход....
Отсутствует
drage2
Я с самого начала у себя проверил, на тех сайтах которые перечислил... вот и подумал что не пашет везде, отсюда и написал первый пост.
Притом что именно его отключений на этих сайтах, у меня пашет ваш скрипт.
Это вы со свойм величественным самомнением, передернули. Как разговаривать даже не знаю, давайте закончим этот разговор, я лишь сказал свое мнение опираясь на свой опыт, с мойм браузером(настройками, аддонами и т.д.), в моем случае не пашет, у вас пашет... Кому надо те выберут что надо что нет. Так можно в несколько страниц растенуть у кого больше. (Хотя с таким самомнением у вас всегда больше). Все я не отвечаю. Просто достало, что здесь что на ru-boarde, ты человек а мы скоты.
Отредактировано func4ptch4 (31-08-2018 23:18:52)
Отсутствует
Для сайтов ,где не берет ничего нужен IDM и кнопка . Ссылку с IDM - в буфер и клацаем кнопку , можно просто гор.клавишей(F6). Плеер, естественно,свой...
/*CODE*/ var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); file.initWithPath('C:\\PotPlayer\\PotPlayer.exe'); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); var link = gClipboard.read(); var args = [link,"/play"]; process.init( file ); process.run( false, args, args.length );
Отредактировано drage2 (01-09-2018 10:10:23)
Отсутствует
«Merge Day!»
А вот и нет. Это только в календаре так написано.
Между тем, успели уже menulist в CB-редакторе испортить.
Переложил немного стилей в скрипт, и у меня на Win7 снова нормально отображается,
но как на других OS'ях посмотреть негде.
Вобщем, custom_buttons-0.0.5.9.0.3-fx.xpi, если может у кого бета.
Отсутствует
Dumby
На семёре нет вроде проблем ни с 1 , ни с 2 . Нужна кнопка "обновить иконки закладок" - на 60 еще работает, в 61 - есть аддон от Виталия ...
В 62 только дурацкий CheckBookmarks// Рихтовал,рихтовал кнопку и никак...
/*Initialization Code*/ // Добавить новый пункт "Восстановить иконки закладок" в меню папок закладок, от 16.05.2016. ..................... (function() { var menuitem = document.createElement("menuitem"); menuitem.setAttribute("id", "placesContext_restoreIcons"); menuitem.setAttribute("label", "Восстановить иконки всех закладок"); menuitem.setAttribute("selection", "folder"); menuitem.setAttribute("closemenu", "single"); menuitem.setAttribute("oncommand", "this.run(document)"); menuitem.run = function(doc) { var node = PlacesUIUtils.getViewForNode(doc.popupNode).selectedNode; var folderId = node.folderItemId ? node.folderItemId : node.itemId; var contents = PlacesUtils.getFolderContents(folderId, false, false).root; // перебрать все http(s) закладки for ( i = 0; i < contents.childCount; ++i ) { var item = node.getChild(i); item.uri.startsWith("http") && getSiteFavicon(item.uri); } }; // Добавить иконки к закладкам с одинаковыми адресами .... function setBookFavicon(faviconURI, siteURI) {LOG(siteURI + "\n" +faviconURI); var iconURI = Services.io.newURI(faviconURI, null, null); var bookmarkURI = Services.io.newURI(siteURI, null, null); var faviconService = Cc["@mozilla.org/browser/favicon-service;1"].getService(Ci.mozIAsyncFavicons); faviconService.setAndFetchFaviconForPage( bookmarkURI, iconURI, false, faviconService.FAVICON_LOAD_NON_PRIVATE ) }; // Получить адрес иконки закладки и запустить установку иконки .... function getSiteFavicon(siteURI) { var hostURI = "http://" + siteURI.split(/\/+/g)[1] + "/"; var faviconURI = hostURI + "favicon.ico"; // адрес иконки, если не получить адрес иконки из сайта if ( getSiteFavicon[siteURI] ) return; // стоп если закладка с таким адресом уже была getSiteFavicon[siteURI] = true; // получить адрес иконки из документа сайта закладки var xhr = new XMLHttpRequest(); xhr.open("GET", siteURI, true); xhr.responseType = "document"; xhr.onload = xhr.onerror = function() { var doc = xhr.responseXML; if ( doc !== null ) { var links = doc.getElementsByTagName("link"); [...links].forEach(function(link) { if ( /(?:^|\s)icon(?:\s|$)/.test(link.rel.toLowerCase()) ) faviconURI = link.href }); } setBookFavicon(faviconURI, siteURI); // запустить установку иконки } xhr.send(); }; // Добавить новый пункт во все меню папок закладок .... function handlePopup(e) { var node = e.target; if ( node.id !== 'placesContext' ) return; var sortByName = node.getElementsByAttribute("id", "placesContext_sortBy:name")[0]; setTimeout(()=> { menuitem.setAttribute("disabled", sortByName.disabled) }, 50); if ( node.getElementsByAttribute("id", "placesContext_deleteDuplicates")[0] ) return; node.insertBefore(menuitem, sortByName); }; addEventListener("popupshowing", handlePopup, true, window); addDestructor(()=> menuitem.parentNode && menuitem.parentNode.removeChild(menuitem) ); })();
Отсутствует
Панель закладок в контекстном меню.
Если, конечно, у кого-то этот код сохранился...
При попытке наведении мыша на пункт в контекстном меню, Firefox задумывается, облизывается, в задумчивости начинает кушать память; жрёт, жрёт, пока она не заканчивается и в чувство его может привести лишь убийство процесса.
На форуме
Приветствую всех. Понимаю, что тяжёлые времена настали , но всё же рискну с просьбой. Знает ли кто-либо коды для следующих кнопок (Мозилла 61):
1. Копировать адрес страницы
2. Обновить все вкладки, кроме текущей
3. Зайти в "Персонализацию"
Спасибо!
Отсутствует
Артик, 1. https://forum.mozilla-russia.org/viewto … 52#p658952
// Добавить подменю "Копировать адрес и название как BBCode или" в контекстном меню вкладки, от 17.07.2015. ................................ (function( tabContextMenu ) { var separator = tabContextMenu.appendChild( document.createElement("menuseparator") ); var menu = tabContextMenu.appendChild( document.createElement("menu") ); menu.setAttribute("label", "Копировать:"); addDestructor(function() { tabContextMenu.removeChild( menu ); tabContextMenu.removeChild( separator ); }); var data = { url: "Адрес", image: "Адрес иконки", label: "Название", } var menuPopup = menu.appendChild( document.createElement("menupopup") ); for ( var key in data ) { if ( key.startsWith("separator") ) { menuPopup.appendChild(document.createElement("menuseparator")); continue }; var menuitem = menuPopup.appendChild( document.createElement("menuitem") ); menuitem.setAttribute("label", data[key] ); menuitem.arg = key; }; addEventListener("click", function(e) { var info, tab = document.popupNode, lab = tab.label; var tabs = e.button == 0 ? [...gBrowser.tabs] : gBrowser.visibleTabs; var arg = (e.target == menu) ? "tabInfoBbcode" : e.target.arg; switch( arg ) { case "url": info = tab.linkedBrowser.currentURI.spec; break; case "image": info = tab.image.replace("#-moz-resolution=16,16",""); break; case "label": info = lab; break; } gClipboard.write( info ); tabContextMenu.hidePopup(); }, false, menu ); function copyShortUrl() { var xhr = new XMLHttpRequest(); xhr.open('POST', 'https://www.googleapis.com/urlshortener/v1/url?key=AIzaSyC7uWVak6m9AFIMORinK4gfNZZ5IrNPgKA', true); xhr.setRequestHeader("Content-type", "application/json"); var request = { longUrl:content.location.href, key:'{YOUR_API_KEY}' } xhr.onload = xhr.onerror = function() { try { gClipboard.write( JSON.parse(xhr.response).id ) } catch (e) { custombuttons.alertSlide("Ошибка, не удалось получить короткий адрес","") }; } xhr.send( JSON.stringify(request) ); }; function getBuildInfo( tab, arg ) { var info, url = tab.linkedBrowser.currentURI.spec; switch( arg.slice(-4) ) { case "code": info = '[url="' + url + '"]' + tab.label + '[/url]'; break; case "Html": info = '<a href="' + url + '">' + tab.label + '</a>'; break; case "Info": info = tab.label + "\n" + url; } return info; }; })(document.getElementById("tabContextMenu"));
Отсутствует
Артик, 1. https://forum.mozilla-russia.org/viewto … 52#p658952
Адрес, Адрес иконки, НазваниеВыделить кодКод:
// Добавить подменю "Копировать адрес и название как BBCode или" в контекстном меню вкладки, от 17.07.2015. ................................ (function( tabContextMenu ) { var separator = tabContextMenu.appendChild( document.createElement("menuseparator") ); var menu = tabContextMenu.appendChild( document.createElement("menu") ); menu.setAttribute("label", "Копировать:"); addDestructor(function() { tabContextMenu.removeChild( menu ); tabContextMenu.removeChild( separator ); }); var data = { url: "Адрес", image: "Адрес иконки", label: "Название", } var menuPopup = menu.appendChild( document.createElement("menupopup") ); for ( var key in data ) { if ( key.startsWith("separator") ) { menuPopup.appendChild(document.createElement("menuseparator")); continue }; var menuitem = menuPopup.appendChild( document.createElement("menuitem") ); menuitem.setAttribute("label", data[key] ); menuitem.arg = key; }; addEventListener("click", function(e) { var info, tab = document.popupNode, lab = tab.label; var tabs = e.button == 0 ? [...gBrowser.tabs] : gBrowser.visibleTabs; var arg = (e.target == menu) ? "tabInfoBbcode" : e.target.arg; switch( arg ) { case "url": info = tab.linkedBrowser.currentURI.spec; break; case "image": info = tab.image.replace("#-moz-resolution=16,16",""); break; case "label": info = lab; break; } gClipboard.write( info ); tabContextMenu.hidePopup(); }, false, menu ); function copyShortUrl() { var xhr = new XMLHttpRequest(); xhr.open('POST', 'https://www.googleapis.com/urlshortener/v1/url?key=AIzaSyC7uWVak6m9AFIMORinK4gfNZZ5IrNPgKA', true); xhr.setRequestHeader("Content-type", "application/json"); var request = { longUrl:content.location.href, key:'{YOUR_API_KEY}' } xhr.onload = xhr.onerror = function() { try { gClipboard.write( JSON.parse(xhr.response).id ) } catch (e) { custombuttons.alertSlide("Ошибка, не удалось получить короткий адрес","") }; } xhr.send( JSON.stringify(request) ); }; function getBuildInfo( tab, arg ) { var info, url = tab.linkedBrowser.currentURI.spec; switch( arg.slice(-4) ) { case "code": info = '[url="' + url + '"]' + tab.label + '[/url]'; break; case "Html": info = '<a href="' + url + '">' + tab.label + '</a>'; break; case "Info": info = tab.label + "\n" + url; } return info; }; })(document.getElementById("tabContextMenu"));
Спасибо, конечно за информацию, полезная кнопка. Но мне хотелось бы просто кнопку копирования адреса по нажатию левой кнопки и всё.
Отсутствует
Артик
В 61-62 без мультирежима
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%3ECopy%20clipboard/%u043C%u0430%u0441%u0448%u0442%u0430%u0431%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAACU0lEQVR42q2UPWhTURiGn9C0aVOJGL1qbTCQSiUViwWhcTCDIYKYQaq2Eq0/4O6ggwhVoejSyaXioINIpEMqmoKDdLBY0kIHq2BBqFKIOgQUkyYlNenxnHtq89OkdPAb7uHe853nvN97vnMtrltC8B/CUguUzYLNBnV1+j21qEfHFj3mcnp+Q5BKUpFMpODTNKR/wmJWU7c5odGOw3+M5qbiRlVBdRZYmE3Ixxy+20HiZyrK6Jc7zU7gDARNkFJWBvonV5WRGn/N3ckT3Nlaw5OTC1LpL1xHD61XpECtu+B9VJazx4MYNXRSYE5+fAsih2/yGnEvfKdAa3sMd+8pCqIKqM0NU8Nj+G6GiF+CF3no2TGIcXWA5GgUlnOIRHhVRQTjXLh6aW17JeihBA1JUAie/YF+YxDfvQGmHr2BHwlE8ooG7X6KceHiepDypqMdvaDBhpjx6wWd8v3bPKxk8L28Tty/6pMnSkvvadNwE1Qo6GNssOqEL48j4DQQH4Jr5i4haMJSNPu8bIf5j7gC3eVmK8iy9CPxXPpwoBsRc9Xs4iNPpOqhMRzHQ9jqS45fKcosydJejYCnEzHuLe7ck4S5aQ5eDvH5q/RxZsI03NodxNgO+XxFHyVi0ge3t0xJx33JGNZlsiJX1MsV+w/j3ucw59MZsNsrOluBSj3ZeUNekegILX19uFvlB5UlLfqd1vewUHEfqoK6hmT/PYjgPBs2d1SnqbwoDau1eM/WQKp/ku9kN2dTuoTGZqxdfrPLS+VvFGug0lDmVf4mNgXafHrt+AuDpPp7jCQ8NwAAAABJRU5ErkJggg%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*/%0Avar%20idbut%3Dthis.id%3B%0Avar%20urlbar%20%3D%20document.getElementById%28%22page-action-buttons%22%29%3B%0Avar%20button1%20%3D%20document.getElementById%28idbut%29%3B%0Aurlbar.insertBefore%28button1%2C%20urlbar.lastChild%29%3B%0A%0Athis.onclick%20%3D%20this.oncontextmenu%20%3D%20function%28event%29%20%7B%0Aif%20%28event.button%20%3D%3D%200%29%20%7B%0AgClipboard.write%28%20content.location%20%29%3B%0AalertsService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alertsService.showAlertNotification%28%22chrome%3A//global/skin/icons/cpd_OK.png%22%2C%20%22CopyClipboard%22%2C%20%22%u0410%u0434%u0440%u0435%u0441%20%u0432%20%u0431%u0443%u0444%u0435%u0440%u0435%22%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20alertsService.closeAlert%28%29%2C%201000%29%3B%20%0A%0A%7D%0A%7D%3B%0Athis.oncontextmenu%20%3De%3D%3E%20%7B%20e.button%20%26%26%20%21e.ctrlKey%20%26%26%20e.preventDefault%28%29%20%7D%3B%0Avar%20style%20%3D%20custombutton.buttonGetHelp%28self%29.replace%28/id/g%2C%20_id%29%3B%0Avar%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28style%29%29%3B%0Avar%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0Asss.loadAndRegisterSheet%28uri%2C%200%29%3B%20%0A%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%22%3B%20%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%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
Отредактировано drage2 (05-09-2018 14:46:07)
Отсутствует
1. Копировать адрес страницы
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%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAE4SURBVHjaYvz//z8DJYCRUgMY7ikovAViBpAxUPz/Ozs7AxD/eiMo+PszF9ff+/Lyr5Dkv4JpoMUgzCL89i0fuqEcP3+CKNavXFyMYMavXwxQ/SA+F7Japr9MTAwgjA0Iv3/PwPPtG4j5DZcPmICBAAoIho+8gtjkwa4Vev9hJ9R2TPBESuYHSNUHoAGwMECjsbOhYQByOwdU7jeSPzFiC4i/oriMkRGMGQc8HVBugJxHiruIS8r2zz//giIDFgZgmoed+f/TDX06MgFFiz/9/GOEFEZg+s/p1V4sQN7/CmcFxoN3PzD8/POPESnQGJiZGBnXAuWVRbgY+DlZGJACGEzvO8Pwn+Xty2dX77z5fl1LgpsDI4o//Hj/+dWTh/++fTxsrKqAklC+/vr7d93rFzcHPhABAgwAGkqlPP2nfmIAAAAASUVORK5CYII%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*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%0Aurl%20%3D%20content.document.location.href%3B%0AgClipboard.write%28url%29%3B%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%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
«The Truth Is Out There»
Отсутствует