Вопрос такой - есть работающий прогресс-бар на загрузку страниц в адресной строке - но работает он только при нажатии на кнопку
Как его приладить без кнопки - чтоб автоматом запускался при загрузке FF 56.3
/*CODE*/ //Полоса загрузки в адресной строке (function(){ //Location Bar Enhancer5.1;Loading Bar0.3.0 var cssStr = (function(){/* #urlbar { background-image: -moz-repeating-linear-gradient(top -45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,0) 6px, rgba(255,255,255,0) 12px), -moz-linear-gradient(left, #33FF66 0%, #33FF66 100%); background-size:0 0; background-repeat:repeat-x, no-repeat; // transition: background-size 350ms ease 0s !important; } #urlbar:not([connecting])::after { display:none; } @-moz-keyframes progress-bar-stripes { from { background-position: 0, 0; } to { background-position: 51px 0, 0; } } */}).toString().replace(/^.+\s|.+$/,""); var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\""); var mainW = document.getElementById("main-window"); document.insertBefore(style, mainW); function main(window) { var {document, gBrowser} = window; function $(id) document.getElementById(id); var urlbar = $("urlbar"); let pageProgress = 0; let async = makeWindowHelpers(window).async; var LoadingBar = { listener: { onChangeTab: function(e) { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, onProgressChange: function(aBrowser,webProgress,request,curSelfProgress,maxSelfProgress,curTotalProgress,maxTotalProgress) { if (gBrowser.contentDocument === aBrowser.contentDocument) { var val = (curTotalProgress-1)/(maxTotalProgress-1); pageProgress = val; urlbar.style.backgroundSize = (100*val) + '% 100%'; if (val > 0.9) async(function() { if (pageProgress > 0.95) urlbar.style.backgroundSize = '100% 100%'; }, 1000); } }, onStateChange: function() { if (pageProgress > 0.95){ async(function() { urlbar.style.backgroundSize = '0% 100%'; pageProgress = 0; }, 1000); }else{ urlbar.style.backgroundSize = '0% 100%'; } } } }; gBrowser.tabContainer.addEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.addTabsProgressListener(LoadingBar.listener); unload(function() { gBrowser.tabContainer.removeEventListener('TabSelect',LoadingBar.listener.onChangeTab,false); gBrowser.removeTabsProgressListener(LoadingBar.listener); }, window); } watchWindows(main, "navigator:browser"); function runOnLoad(window, callback, winType) { window.addEventListener("load", function() { window.removeEventListener("load", arguments.callee, false); if (window.document.documentElement.getAttribute("windowtype") == winType) callback(window); }, false); } function runOnWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } let browserWindows = Services.wm.getEnumerator(winType); while (browserWindows.hasMoreElements()) { let browserWindow = browserWindows.getNext(); if (browserWindow.document.readyState == "complete") watcher(browserWindow); else runOnLoad(browserWindow, watcher, winType); } } function watchWindows(callback, winType) { function watcher(window) { try { callback(window); } catch(ex) {} } runOnWindows(callback, winType); function windowWatcher(subject, topic) { if (topic == "domwindowopened") runOnLoad(subject, watcher, winType); } Services.ww.registerNotification(windowWatcher); unload(function() Services.ww.unregisterNotification(windowWatcher)); } function unload(callback, container) { let unloaders = unload.unloaders; if (unloaders == null) unloaders = unload.unloaders = []; if (callback == null) { unloaders.slice().forEach(function(unloader) unloader()); unloaders.length = 0; return null; } if (container != null) { container.addEventListener("unload", removeUnloader, false); let origCallback = callback; callback = function() { container.removeEventListener("unload", removeUnloader, false); origCallback(); } } function unloader() { try { callback(); } catch(ex) {} } unloaders.push(unloader); function removeUnloader() { let index = unloaders.indexOf(unloader); if (index != -1) unloaders.splice(index, 1); } return removeUnloader; } function makeWindowHelpers(window) { let {clearTimeout, setTimeout} = window; function async(callback, delay) { delay = delay || 0; let timer = setTimeout(function() { stopTimer(); callback(); }, delay); function stopTimer() { if (timer == null) return; clearTimeout(timer); timer = null; } } return { async: async, }; } })();
ВСе вопрос снят - в инициализации "в фоне" засунул
Отредактировано svin88 (18-04-2020 22:30:00)
Отсутствует
Можно сделать под 75+ скрипт выше? если долго то не надо, просто хотел затестить.
Отредактировано func4ptch4 (19-04-2020 09:59:02)
Отсутствует
работающий прогресс-бар на загрузку страниц в адресной строке
На v57 еще работает, на v68 уже не работает. Но идея интересная!
Dumby
Плиз, поправьте, пожалуйста!
Отредактировано shadow_user (19-04-2020 19:04:08)
Отсутствует
func4ptch4 только для urlbar.update1 = false
var cssStr = (function(){/*
#urlbar {
background-image: repeating-linear-gradient(-45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,0) 6px, rgba(255,255,255,0) 12px), linear-gradient(to left, #33FF66 0%, #33FF66 100%);
background-size:0 0;
background-repeat:repeat-x, no-repeat;
}
#urlbar:not([connecting])::after {
display:none;
}
@-moz-keyframes progress-bar-stripes {
from {
background-position: 0, 0;
}
to {
background-position: 51px 0, 0;
}
}
*/}).toString().replace(/^.+\s|.+$/,"");
var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\"");
var mainW = document.getElementById("main-window");
document.insertBefore(style, mainW);
function main(window) {
var {
document,
gBrowser
} = window;
function $(id) {
return document.getElementById(id)
};
var urlbar = $("urlbar");
let pageProgress = 0;
let async = makeWindowHelpers(window).async;
var LoadingBar = {
listener: {
onChangeTab: function(e) {
urlbar.style.backgroundSize = '0% 100%';
pageProgress = 0;
},
onProgressChange: function(aBrowser, webProgress, request, curSelfProgress, maxSelfProgress, curTotalProgress, maxTotalProgress) {
if (gBrowser.contentDocument === aBrowser.contentDocument) {
var val = (curTotalProgress - 1) / (maxTotalProgress - 1);
pageProgress = val;
urlbar.style.backgroundSize = (100 * val) + '% 100%';
if (val > 0.9)
async(function() {
if (pageProgress > 0.95)
urlbar.style.backgroundSize = '100% 100%';
}, 1000);
}
},
onStateChange: function() {
if (pageProgress > 0.95) {
async(function() {
urlbar.style.backgroundSize = '0% 100%';
pageProgress = 0;
}, 1000);
} else {
urlbar.style.backgroundSize = '0% 100%';
}
}
}
};
gBrowser.tabContainer.addEventListener('TabSelect', LoadingBar.listener.onChangeTab, false);
gBrowser.addTabsProgressListener(LoadingBar.listener);
unload(function() {
gBrowser.tabContainer.removeEventListener('TabSelect', LoadingBar.listener.onChangeTab, false);
gBrowser.removeTabsProgressListener(LoadingBar.listener);
}, window);
}
watchWindows(main, "navigator:browser");
function runOnLoad(window, callback, winType) {
window.addEventListener("load", function() {
window.removeEventListener("load", arguments.callee, false);
if (window.document.documentElement.getAttribute("windowtype") == winType)
callback(window);
}, false);
}
function runOnWindows(callback, winType) {
function watcher(window) {
try {
callback(window);
} catch (ex) {}
}
let browserWindows = Services.wm.getEnumerator(winType);
while (browserWindows.hasMoreElements()) {
let browserWindow = browserWindows.getNext();
if (browserWindow.document.readyState == "complete")
watcher(browserWindow);
else
runOnLoad(browserWindow, watcher, winType);
}
}
function watchWindows(callback, winType) {
function watcher(window) {
try {
callback(window);
} catch (ex) {}
}
runOnWindows(callback, winType);
function windowWatcher(subject, topic) {
if (topic == "domwindowopened")
runOnLoad(subject, watcher, winType);
}
Services.ww.registerNotification(windowWatcher);
unload(function() {
Services.ww.unregisterNotification(windowWatcher)
});
}
function unload(callback, container) {
let unloaders = unload.unloaders;
if (unloaders == null)
unloaders = unload.unloaders = [];
if (callback == null) {
unloaders.slice().forEach(function(unloader) {
unloader()
});
unloaders.length = 0;
return null;
}
if (container != null) {
container.addEventListener("unload", removeUnloader, false);
let origCallback = callback;
callback = function() {
container.removeEventListener("unload", removeUnloader, false);
origCallback();
}
}
function unloader() {
try {
callback();
} catch (ex) {}
}
unloaders.push(unloader);
function removeUnloader() {
let index = unloaders.indexOf(unloader);
if (index != -1)
unloaders.splice(index, 1);
}
return removeUnloader;
}
function makeWindowHelpers(window) {
let {
clearTimeout,
setTimeout
} = window;
function async(callback, delay) {
delay = delay || 0;
let timer = setTimeout(function() {
stopTimer();
callback();
}, delay);
function stopTimer() {
if (timer == null)
return;
clearTimeout(timer);
timer = null;
}
}
return {
async: async,
};
}
})();
Отредактировано Andrey_Krropotkin (19-04-2020 23:15:17)
Отсутствует
Andrey_Krropotkin, спасибо, но смотрю на код и думаю не сложно было? там столько кода... ааа.
Кстати в новой ночнушке отпилили вроде urlbar.update1=false, вот недавно только обновил и настройки не пашут.. надеюсь временно как как тестовая сборка, но говорят настройки отпилили).
Просил до обновы и не думал о таком, так что извините заранее, я скорее перейду на стабильную ветку, просто интересно они и в стабильную это завезут? если так то там много чего отвалится, многие стили и т.д.
Отсутствует
Quartz1t, кнопка для запуска ссылки в другом браузере? в торе к примеру, или код который я видел, но он был в esr на рутрекере, там автор сам пишет его, его если подправить как основу для кнопки и норм, но думаю тебе надо найти кинуть сюда, и если кому нибудь захочется он сделает, что 30% из 100% может и ниже..
Вообще интересная кнопка я бы и себе взял, но я не умею.
Также в плане анонимности лучше все таки сам браузер тор использовать, если как прокси то надо ли тебе тогда тор?
Отсутствует
Dumby можно эту кнопку адаптировать для user_chrome_files? 75.0
Попробуй так:
сохрани код как Save.js в папку custom_scripts (рядом с custom_script.js),
а в custom_script.js добавь этот код
try {CustomizableUI.createWidget({ id: "ucf-cbbtn-Save", localized: false, get initCode() { delete this.initCode; return this.initCode = Cu.readUTF8URI(Services.io.newURI( "chrome://user_chrome_files/content/custom_scripts/Save.js" )); }, cbu: { types: { 128: "Bool", boolean: "Bool", 64: "Int", number: "Int", 32: "String", string: "String" }, getPrefs(pref) { try { return Services.prefs[`get${ this.types[Services.prefs.getPrefType(pref)] }Pref`](pref); } catch {return null;} }, setPrefs(pref, val) { Services.prefs[`set${this.types[typeof val]}Pref`](pref, val); } }, gClipboard: { get ch() { delete this.ch; return this.ch = Cc["@mozilla.org/widget/clipboardhelper;1"] .getService(Ci.nsIClipboardHelper); }, write(str) { this.ch.copyStringToClipboard(str, Services.clipboard.kGlobalClipboard); } }, addDestructor(destructor, context) { this._destructors.push({destructor, context}); }, addEventListener(...args) { var trg = args[3]; if (!trg) trg = args[3] = this.ownerGlobal; trg.addEventListener(...args); this._handlers.push(args); }, onCreated(btn) { var win = btn.ownerGlobal; btn._handlers = new win.Array(); btn._destructors = new win.Array(); win.addEventListener("unload", this, {once: true}); new win.Function( "self,_id,cbu,xhtmlns,addDestructor,addEventListener,gClipboard", this.initCode ).call( btn, btn, this.id, this.cbu, "http://www.w3.org/1999/xhtml", this.addDestructor.bind(btn), this.addEventListener.bind(btn), this.gClipboard ); }, handleEvent(e) { var btn = e.target.getElementById(this.id); for(var args of btn._handlers) args.pop().removeEventListener(...args); delete btn._handlers; for(var {destructor, context} of btn._destructors) try {destructor.call(context, "destructor");} catch(ex) {Cu.reportError(ex);} delete btn._destructors; } });} catch(ex) {Cu.reportError(ex);}
Отредактировано Dumby (24-04-2020 08:47:12)
Отсутствует
Попробуй так:
Здорово, спасибо.
А с Cookies Permissions такое можно проделать?
Отсутствует
typeof pref
Упс, конечно же typeof val
А эту кнопку так же не получиться сделать
Может и получится, но я её уже пытался интегрировать,
не охота переделывать, разве что только если не работает.
try {CustomizableUI.createWidget({ label: "Переключить текущий поисковик", id: "ucf-cbbtn-ToggleCurrentSearchEngine", image: "data:image/png;base64,AAABAAEAEBAAAAEAGABoAwAAFgAAACgAAAAQAAAAIAAAAAEAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs9Pt8xetPtu9FsfFNtu%2BTzvb2%2B%2Fne4dFJeBw0egA%2FfAJAfAA8ewBBegAAAAD%2B%2FPtft98Mp%2BwWsfAVsvEbs%2FQeqvF8xO7%2F%2F%2F63yqkxdgM7gwE%2FggM%2BfQA%2BegBDeQDe7PIbotgQufcMufEPtfIPsvAbs%2FQvq%2Bfz%2Bf%2F%2B%2B%2FZKhR05hgBBhQI8hgBAgAI9ewD0%2B%2Fg3pswAtO8Cxf4Kw%2FsJvvYAqupKsNv%2B%2Fv7%2F%2FP5VkSU0iQA7jQA9hgBDgQU%2BfQH%2F%2Ff%2FQ6fM4sM4KsN8AteMCruIqqdbZ7PH8%2Fv%2Fg6Nc%2Fhg05kAA8jAM9iQI%2BhQA%2BgQDQu6b97uv%2F%2F%2F7V8Pqw3eiWz97q8%2Ff%2F%2F%2F%2F7%2FPptpkkqjQE4kwA7kAA5iwI8iAA8hQCOSSKdXjiyflbAkG7u2s%2F%2B%2F%2F39%2F%2F7r8utrqEYtjQE8lgA7kwA7kwA9jwA9igA9hACiWSekVRyeSgiYSBHx6N%2F%2B%2Fv7k7OFRmiYtlAA5lwI7lwI4lAA7kgI9jwE9iwI4iQCoVhWcTxCmb0K%2BooT8%2Fv%2F7%2F%2F%2FJ2r8fdwI1mwA3mQA3mgA8lAE8lAE4jwA9iwE%2BhwGfXifWvqz%2B%2Ff%2F58u%2Fev6Dt4tr%2B%2F%2F2ZuIUsggA7mgM6mAM3lgA5lgA6kQE%2FkwBChwHt4dv%2F%2F%2F728ei1bCi7VAC5XQ7kz7n%2F%2F%2F6bsZkgcB03lQA9lgM7kwA2iQktZToPK4r9%2F%2F%2F9%2F%2F%2FSqYK5UwDKZAS9WALIkFn%2B%2F%2F3%2F%2BP8oKccGGcIRJrERILYFEMwAAuEAAdX%2F%2Ff7%2F%2FP%2B%2BfDvGXQLIZgLEWgLOjlf7%2F%2F%2F%2F%2F%2F9QU90EAPQAAf8DAP0AAfMAAOUDAtr%2F%2F%2F%2F7%2B%2Fu2bCTIYwDPZgDBWQDSr4P%2F%2Fv%2F%2F%2FP5GRuABAPkAA%2FwBAfkDAPAAAesAAN%2F%2F%2B%2Fz%2F%2F%2F64g1C5VwDMYwK8Yg7y5tz8%2Fv%2FV1PYKDOcAAP0DAf4AAf0AAfYEAOwAAuAAAAD%2F%2FPvi28ymXyChTATRrIb8%2F%2F3v8fk6P8MAAdUCAvoAAP0CAP0AAfYAAO4AAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAA", excludeHiddenOneOffs: false, gn: () => Services.search.defaultEngine, gp: () => Services.search.defaultPrivateEngine, sn: val => Services.search.defaultEngine = val, sp: val => Services.search.defaultPrivateEngine = val, onCreated(btn) { btn.type = "menu"; btn.owner = this; btn.setAttribute("image", this.image); var win = btn.ownerGlobal; var popup = btn.appendChild(win.document.createXULElement("menupopup")); var pr = win.PrivateBrowsingUtils.isWindowPrivate(win); popup.getDefaultEngine = pr ? this.gp : this.gn; popup.setDefaultEngine = pr ? this.sp : this.sn; popup.setAttribute("oncommand", "setDefaultEngine(event.target.engine)"); popup.setAttribute("onpopupshowing", "this.shouldRebuild && owner.rebuild(this, document)"); this.autoOpenCloseFeature(win, btn); this.updButton(btn, win); }, async rebuild(popup, doc) { popup.textContent = ""; var df = doc.createDocumentFragment(); var de = popup.getDefaultEngine().wrappedJSObject, jsde = this.json(de); if (this.excludeHiddenOneOffs) var ex = Services.prefs.getStringPref(this.pref, "").split(","); var check = true; for(var engine of await Services.search.getVisibleEngines()) { if (check && engine.name == de.name && this.json(engine) == jsde) { check = false; continue; } if (this.excludeHiddenOneOffs && ex.includes(engine.name)) continue; var menuitem = df.appendChild(doc.createXULElement("menuitem")); menuitem.engine = engine; menuitem.label = engine.name; menuitem.image = this.img(engine); menuitem.className = "menuitem-iconic"; } popup.append(df); delete popup.shouldRebuild; }, async updButton(btn, win) { this.updButton = () => {}; Services.search.isInitialized || await Services.search.init(); var topics = ["browser-search-engine-modified", "quit-application-granted"]; for(var topic of topics) Services.obs.addObserver(this, topic, false); this.observe = (s, topic) => this[topic[0]](); var remove = () => topics.forEach( topic => Services.obs.removeObserver(this, topic) ); var {id} = this; var wins = callback => { for(var win of CustomizableUI.windows) { var btn = win.document.getElementById(id); btn && callback(btn, win); } } if (this.excludeHiddenOneOffs) { var setRebuild = btn => btn.firstChild.shouldRebuild = true; var {pref} = this, obs = () => wins(setRebuild); Services.prefs.addObserver(pref, obs); this.q = () => remove(Services.prefs.removeObserver(pref, obs)); } else this.q = remove; var updButton = (btn, win) => { var popup = btn.firstChild; var engine = popup.getDefaultEngine(); /*btn.label =*/ btn.tooltipText = engine.name; popup.shouldRebuild = true; win.requestAnimationFrame(() => btn.icon.src = this.img(engine)); } (this.b = () => wins(updButton))(); this.updButton = updButton; btn.tooltipText || updButton(btn, win); }, pref: "browser.search.hiddenOneOffs", json: e => JSON.stringify(e.toJSON()), img: e => e.iconURI ? e.iconURI.spec : "chrome://browser/skin/search-engine-placeholder.png", // https://github.com/Infocatcher/Custom_Buttons/blob/master/code_snippets/autoOpenCloseMenu.js // Automatically open menu on mouse over (and hide it on mouse out) autoOpenCloseFeature(win, btn, openDelay = 200, closeDelay = 350) { var _openTimer = 0; var _closeTimer = 0; btn.onmouseover = function(e) { win.clearTimeout(_closeTimer); if(e.target == btn && closeOtherMenus()) { btn.open = true; return; } _openTimer = win.setTimeout(function() { btn.open = true; }, openDelay); }; btn.onmouseout = function(e) { win.clearTimeout(_openTimer); _closeTimer = win.setTimeout(function() { if(!isContextOpened()) btn.open = false; }, closeDelay); }; function closeOtherMenus() { return win.Array.prototype.some.call( btn.parentNode.getElementsByTagName("*"), function(node) { if( node != btn && win.XULElement.isInstance(node) // See https://github.com/Infocatcher/Custom_Buttons/issues/28 //&& node.boxObject //&& node.boxObject instanceof Components.interfaces.nsIMenuBoxObject && "open" in node && node.open && node.getElementsByTagName("menupopup").length ) { node.open = false; return true; } return false; } ); } function isContextOpened() { return inBtn(win.document.popupNode); } function inBtn(node) { for(; node; node = node.parentNode) if(node == btn) return true; return false; } } });} catch(ex) {Cu.reportError(ex);}
А с Cookies Permissions такое можно проделать?
Не исключено, наверно
try {CustomizableUI.createWidget({ label: "Cookies Permissions", id: "ucf-cbbtn-CookiesPermissions", localized: false, get initCode() { delete this.initCode; return this.initCode = Cu.readUTF8URI(Services.io.newURI( "chrome://user_chrome_files/content/custom_scripts/cookiesPermissions.js" )); }, onCreated(btn) { var win = btn.ownerGlobal; var dp = class extends win.DOMParser { constructor() { super(); this.forceEnableXULXBL(); } parseFromString(...args) { var doc = this.parseFromSafeString(...args); var [menu] = doc.getElementsByTagName("menu"); btn.defaultContextId = menu.id = btn.id + "-fake-context"; menu.cloneNode = () => menu; menu.appendChild = () => { menu.previousSibling.remove(); menu.remove(); btn.defaultContextId = "toolbar-context-menu"; } return doc; } } win.addEventListener("unload", () => btn.onDestroy("destructor"), {once: true}); win.requestAnimationFrame( () => new win.Function("DOMParser", this.initCode).call(btn, dp) ); } });} catch(ex) {Cu.reportError(ex);}
Отредактировано Dumby (25-04-2020 02:31:40)
Отсутствует
А еще одну не посмотрите
try {CustomizableUI.createWidget({ label: "Дополнения", id: "ucf-cbbtn-ToggleRestartlessAddons", localized: false, get initCode() { this.event = Object.create(null); delete this.initCode; return this.initCode = Cu.readUTF8URI(Services.io.newURI( "chrome://user_chrome_files/content/custom_scripts/toggleRestartlessAddons.js" )); }, onCreated(btn) { btn.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAt0lEQVR42mP4//8/AzK269D+zxDPAMYgNro8OsYUsGf4L5IrAMYgNskGPHrzkAHmAhCbZAPAglFAA6II2w5WC/ZzGEQDDMO9gCQGUmNYr4dhKANPBgdcAyEMMgSrAWA/R0H8jdcALN5iQHYWLABJMgBbABJjACiKweFHigHwgIW6Eux1UryA1QD0QISzsQQqVi+gKEBLfeguwhqIBEM5ihQD4rEoQHaBLwEDQOGBHKggNiyl4sreAEpLK4gRQN5TAAAAAElFTkSuQmCC"); new btn.ownerGlobal.Function("self,event,_phase", this.initCode) .call(btn, btn, this.event, "init"); } });} catch(ex) {Cu.reportError(ex);}
Отсутствует
У меня кнопка появилась, но без иконки и полностью не рабочая.
Что бы заработала, необходимо ещё создать файл с названием-> cookiesPermissions.js -> + этим кодом: https://github.com/Infocatcher/Custom_B … issions.js и добавить в папку custom_scripts.
Отредактировано kokoss (26-04-2020 16:33:20)
Win7
Отсутствует
Вопросы научись задавать. Запуск чего ? Торпедной одноразовой ракеты ? Браузера или переход в прокси-анонимайзер ?
есть такой косяк... никто не совершенен...
но как по моему всё понятно, ТОР это ТОР, а ТорБраузер это ТорБраузер...
в силу причуд провайдера, иногда нужен подключение к ТОР сети, ВПН или Прокси почему-то не помогают.
не работает ряд сайтов не заблокированные решением "сверху".
на данный момент использую ProxAllium (аналог Vidalia), но кнопка как в браузере от Small_Z былабы удобнее.
сама кнопка громоздкая, много там всякого собрано, пытался её почистить, но не преуспел... увы
Отсутствует
_zt
походу, подменяет системное время на часовой пояс прокси... ну, как-то так))
Добавлено 25-04-2020 23:45:59
solombala
пробовал я всякое... но в некоторых случаях не помогает.
к примеру в корпоративных сетях,.. как в них зашифровать трафик? ТОР справляется) а переходить на ТОрБраузер не хочу, привык к Pale Moon. уже 6 лет на нём...
Добавлено 25-04-2020 23:47:33
и Сustom Buttons на РМ работает без каких либо танцев...
Отредактировано Quartz1t (25-04-2020 23:47:33)
Отсутствует
Bug 1631933 - Remove or revisit support for data:-URLs in the webRequest API (remove/replace WebRequestContent.js)
Конфиг с поправкой
// try {(nsvo => { var o = Cu.getGlobalForObject(nsvo).Object, {freeze} = o, NEW; o.freeze = obj => { if (Components.stack.caller.filename != "resource://gre/modules/AppConstants.jsm") return freeze(obj); obj.MOZ_REQUIRE_SIGNING = false; if ((NEW = "MOZ_ALLOW_ADDON_SIDELOAD" in obj)) lockPref("extensions.experiments.enabled", true); else obj.MOZ_ALLOW_LEGACY_EXTENSIONS = true, lockPref("extensions.legacy.enabled", true); return (o.freeze = freeze)(obj); } lockPref("xpinstall.signatures.required", false); lockPref("extensions.langpacks.signatures.required", false); nsvo = Cu.import("resource://gre/modules/addons/XPIInstall.jsm", {}); var shouldVerify = nsvo.shouldVerifySignedState; nsvo.shouldVerifySignedState = addon => !addon.id && shouldVerify(addon); if (NEW) nsvo.XPIDatabase.isDisabledLegacy = () => false; })( "permitCPOWsInScope" in Cu ? Cu.import("resource://gre/modules/WebRequestCommon.jsm", {}) : Cu );} catch(ex) {Cu.reportError(ex);} // try {({ ids: [ "custombuttons@xsms.org", ], init(xrt) { if (xrt.inSafeMode) return; Cu.import("resource://gre/modules/addons/XPIProvider.jsm", this); var load = async file => { var rootURI = this.XPIInternal.getURIForResourceInFile(file, ""); Cu.import(rootURI.resolve("startup.jsm"), {}).start(rootURI); } var proto = this.XPIInternal.BootstrapScope.prototype; var func = proto._beforeCallBootstrapMethod; proto._beforeCallBootstrapMethod = () => { proto._beforeCallBootstrapMethod = func; for(var addon of this.XPIInternal.XPIStates.enabledAddons()) this.ids.includes(addon.id) && !addon.loader && load(addon.file); } } }).init(Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime));} catch(ex) {Cu.reportError(ex);}
ХЗ почему.
Может консоль что-нибудь подскажет.
Отсутствует
Что бы заработала, необходимо ещё создать файл с названием-> CookiesPermissions.js
регистр важен, cookiesPermissions.js а не CookiesPermissions.js
Отсутствует
регистр важен, cookiesPermissions.js а не CookiesPermissions.js
Спасибо, так конечно работает.
Dumby
Спасибо большое за кнопку.
Отсутствует
Здравствуйте!
Есть кнопка "Поиск по сайту", но к сожалению она сейчас не работает.
Что нужно исправить в данном коде, чтобы она заработала?:
// Настройка функций кликов мыши для кнопки .................. this.onclick =e=> { if ( e.button == 0 ) { var text = getSelect() || custombuttons.promptBox('Поиск по сайту в Google', 'Bведите текст ....')[1]; text !== '' && searchInWebsite(text); } e.button == 1 && searchInWebsite(gClipboard.read()); }; // Поиск по сайту в Google .................. function searchInWebsite(text) { var text = escape( convertFromUnicode("UTF-8", text) ); //var domain = Services.eTLD.getBaseDomain( gBrowser.currentURI ); var domain = encodeURIComponent(content.document.domain); var url = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + domain; gBrowser.selectedTab = gBrowser.addTab(url); }; // Конвертировать текст в юникод .................. function convertFromUnicode(charset, str) { var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); converter.charset = charset; str = converter.ConvertFromUnicode(str); return str + converter.Finish(); }; // Получить выделенный текст из страницы или false .................. function getSelect() { var sel = gBrowser.contentDocument.defaultView.getSelection().toString() return (sel == '') ? false : sel.toString().replace(/^\s+|\s+$/g,""); }; // Подсказка для кнопки .................. this.tooltipText = "Поиск по сайту \nЛ: Поиск выделенного или введённого текста \nС: Поиск текста из буфера обмена \nП: CB меню";
Firefox 71.0
Отсутствует