dinn
Так выше речь тоже про ПКМ.
А вообще есть стиль, которому 1000 лет.
/* 'удалить куки и данные сайта' всегда видимый, цвет когда он д.б. скрыт */ #identity-popup-clear-sitedata-footer[hidden="true"] { display: flex !important; color: rgb(200,110,0) !important; } @media (prefers-color-scheme: dark) { #identity-popup-clear-sitedata-footer[hidden="true"] { color: rgb(154,128,14) !important; } }
/* 'удалить куки и данные сайта' всегда видимый, цвет когда он д.б. скрыт */ #identity-popup-clear-sitedata-footer[hidden="true"] { display: flex !important; font-weight: bold !important; color: rgb(200,110,0) !important; @media (prefers-color-scheme: dark) { color: rgb(154,128,14) !important; } }
Отредактировано _zt (29-05-2025 11:36:58)
Отсутствует
Коллеги, объясню свою мысль подробнее.
Я знаю, что можно удалить всё и вся без лишних вопросов кнопкой (здесь почти средний вариант из 3-х ссылок)
/* https://forum.mozilla-russia.org/viewtopic.php?pid=780423#p780423 https://forum.mozilla-russia.org/viewtopic.php?pid=790598#p790598 есть новая версия https://forum.mozilla-russia.org/viewtopic.php?pid=809326#p809326 */ // Очистить историю try { ((img, preventClearThumbs) => { CustomizableUI.createWidget({ id: "bt-clear-history", label: "Очистить историю", tooltiptext: "Очистить историю", defaultArea: CustomizableUI.AREA_NAVBAR, onCreated: function(bt) { bt.image = img; }, onCommand: function(event) { var win = event.target.ownerDocument.defaultView; var itemsToClear = [ "cookies", // "history", // "formdata", // "sessions", "cache", // "downloads", // "offlineApps", // "pluginData", // "siteSettings", ]; var range = win.Sanitizer.getClearRange(0); // 0 - всё; 1 - за час; 2 - за 2 часа; 3 - за 4 часа; 4 - за сегодня win.Sanitizer.sanitize(itemsToClear, { ignoreTimespan: !range, range, }).then(() => { var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService); alertsService.showAlertNotification(img, "История Очищена!", "", false); win.setTimeout(()=> alertsService.closeAlert(), 2000); }); } }); })("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAO6SURBVHjafMx7UNMFHADw72AgIaNA4y4eBzrkEYzhwCWvbU4IvZ3eeSZRcpg9rjpLogIkUB4yJVQ0T/RADhE6QB5jjA2YobeNMXQwJmO8lrgNfoMZLHmeBJ7f/qj+6Hr88fn3A9KinfB/7vIZIC3aSWrJDnBryQnN67rAWeqrOLR4/3K8tvVM+E3oyg//T9KzDPjpXATc5UeQO/i7C9rPMnWSQsbIvZIYQlwYoarPDCoFWXXMP8hrYkF2OxZEhUHQmOYFolz/kL6yBOXwrQM4eJ212HMpCttOh9bWfUPdBUoB51/sAaWAAw9boqH7Wqh3c7Z/5oPSKKOhkoXaq4z1ttwQXW26f/KP6dtJIGvggKyB/TfyOyySShDrYtTu8x29zzohPkftkxd4rt3L8cLmDL/h+qxtSXe+o25qyd0BMCCJA42EBZoONmg6OTDYxYKeJu6W9nJe0kPRkYZxGc+qa4tY19dTsbvUe74mZ1uFqDjYV1oaCh0XQwAsQ0yY0UeDdYwD1nEuzE3EgFq0n3391Jc9tcU5az3NWTgq/xzNj1JxTMmdltcFl7RfpvkIztNBWEIHmBp8C6YfRYNlmA2WYS5YdHF7xxQHBPLGky+EZdl4IyMP+an5WJaWiY0XDg+Kyxmpwkt099bicGj9PvyvIAYIHct9eijuw0XzcfWG7RQ+t36BK0QKErr9qJZwsIZ/GK99+07brcK3qVX5ieSq/ESoyk/8IzBrIl1m9PHHlohPH/82n4sbtixce/oBLpl4OD+xG636cDT2M1EtipR0VYa+2VlJc1TUhUG/gA5gHmBQZkf2nVi2pBHrNv6L59YsXCGO4+rMUbQZEnB2iIazuu04PxGIBqW/orfJJ96o8HO5cnorsJmvAMw/Tq61TaZMPzN9hsvTX+Mq8TGuECm4YPoI58a5SGh80fTAA5/qA3BStaNXXPk6L++kG4UWtAkAAODZk4NzC8YjuGg8iguTybg89T4umlPQOvouzuroSGh80KwOwV8NEagUUru/SnWO8vdz2GxnRwInBwC4WuSWIawO6zIOHFpZnUp6uWR8D60jPLQO70KL1g+nBgLRNMDG5UkW3jjvK/DcCr4eW+wplM12jg5kcASyPYlMCyQzz6T7/CBt3qtViff8ohaHLRn6AtZ+7g1eH1eE4aiM/tLQE7mR/on3RQCgAMBrAOAOAK7whoejk4uzvau9HXi6uUJwQozTsYJ0r5vVV8KkwvIAVW9T0JN+SaStopjayWK6JAHAqwDg+mfk/PsAyoD+AIOtnjYAAAAASUVORK5CYII="); } catch(e) {}
(async repl => { var obj = `{\n ${ (await (await fetch("chrome://browser/content/places/controller.js")).text()) .match(/async _removeRange\(.+?\n\ +}(?=,\n)/s)[0] .replace("// This is a common bookmark item.", repl) }\n}` var ps = await ChromeUtils.compileScript("data:,(" + encodeURIComponent(`${obj => { var patch = async ctor => { var proto = ctor.prototype, meth = proto?._removeRange; meth && Object.assign(proto, obj); } var key = "PlacesController"; var desc = Object.getOwnPropertyDescriptor(window, key); if (!desc) return; var {get} = desc; if (get) desc.get = () => { var val = get(); patch(val); return val; }, Object.defineProperty(window, key, desc); else patch(desc.value); }})(${obj});`)); var obs = doc => "PlacesController" in doc.ownerGlobal && ps.executeInGlobal(doc); for(var {document: d} of Services.wm.getEnumerator(null)) d?.readyState == "complete" && obs(d); var topic = "chrome-document-loaded"; Services.obs.addObserver(obs, topic); Services.obs.addObserver(function quit(s, t) { Services.obs.removeObserver(quit, t); Services.obs.removeObserver(obs, topic); }, "quit-application-granted"); })( `$& if (!removedFolders.ignore) { /* let info = await PlacesUtils.bookmarks.fetch(node.bookmarkGuid); */ let args = [node.bookmarkGuid]; let isBookmark = PlacesUtils.nodeIsBookmark(node); isBookmark && args.push(null, {includePath: true}); let info = await PlacesUtils.bookmarks.fetch(...args); if (isBookmark) info.parentGuid = info.path[0].guid; if ( info?.parentGuid == "${PlacesUtils.bookmarks.toolbarGuid}" && !(removedFolders.ignore ??= Services.prompt.confirm( null, null, "Удалить закладку/папку?" )) ) { totalItems--; continue; } }` );
Отредактировано xrun1 (29-05-2025 17:23:47)
Отсутствует
xrun1
Так это в самом браузере уже реализовано - лкм по замку или иконке в адресной строке, а там пункт "Удалить куки и данные сайта...", а если пункта нет, то и удалять нечего. Но можно использовать стиль выше и пункт будет отображаться всегда, и работать он будет так же как скрипт, т.е. всегда запускать процесс удаления с окном подтверждения, даже когда удалять нечего. Но есть и разница, со стилем ты будешь знать, что занимаешься фигней, а со скриптом нет.
Отсутствует
2 А как третий путь нельзя рассмотреть?
в кодике не хватает
Жизнь иногда такое выкидывает, что хочется подобрать...
Отсутствует
Но есть и разница, со стилем ты будешь знать, что занимаешься фигней, а со скриптом нет.
Я не буду. Никогда у себя не видел пункта "Clear Site Data". И в настройках везде пишет, что удалять нечего, нули на всем, однако есть чего. Ну я про приватный режим. Конкретно у меня скрипт удаляет некоторую часть закешированных данных в памяти, а большего не нужно.
На счет видимости пункта стилем, так это надо целых 3 клика делать для очистки, а моя цель - 1 клик
Farby
с какой кнопкой? Я привел только ключевую часть. До ключевой части можно делать проверку, что это не страница about:, file: или data:, а перед удалением вызывать окно подтверждения.
А скрипт с eval для такой короткой функции здесь чисто для вые.... или показать как можно на лету вырезать ненужную часть, отвязать от объекта и выполнить
В консоли для сравнения (построчно + Enter):
gIdentityHandler.clearSiteData + "" let mod = eval(`(${gIdentityHandler.clearSiteData})`.replace(/^\((async\s)?.*?clearSiteData/, "($1function clearSiteData").replace(/this\s*\./g, "gIdentityHandler.").replace(/(?:let\s*hidden\s*=\s*new\s*Promise\s*\([\S\s]+await\s*hidden\s*;|PanelMultiView\.hidePopup.+?;|event\.stopPropagation.+?;)/g, "")) mod + ""
Отсутствует
Request to access cookie or storage on “<URL>” was blocked because we are blocking all storage access requests
т.е. нет пункта Clear Site Data?
Со второго раза понял. Ну так приватный режим это обманка, вместо усиления приватности у вас просто отнимают все инструменты контроля и управления данными, в том числе возможность очистки, а больше в этом режиме и нет ничего. Зачем вы его используете? У вас наверное и safe browsing еще включен?
Privatebrowsing - это не про приватность, это про палки себе же в колеса, clearOnShutdown - вот это про приватность, и его по необходимости на лету отключить можно, если вдруг требуется начать следующую сессию с этого же места.
Приватный просмотр | Справка Firefox
clearOnShutdown +
user_pref("browser.cache.disk.enable", false);
user_pref("browser.cache.memory.enable", true);
Вот и весь ваш Privatebrowsing.
Можно еще в политики добавить
DisablePasswordReveal
А если внешний менеджер, то вообще
PasswordManagerEnabled
Отредактировано _zt (Вчера 11:39:34)
Отсутствует