Achtung
juzzlukin
Nicht die Updatefunktion von Firefox mit der, der Erweiterungen verwechseln.
Das hat nichts miteinander zu tun.
Achtung
juzzlukin
Nicht die Updatefunktion von Firefox mit der, der Erweiterungen verwechseln.
Das hat nichts miteinander zu tun.
Alles anzeigendass diese Einstellung der Ausgangspunkt für alle Aktionen ist.
Nein.
Diese Einstellung betrifft nur den Firefox, aber nicht die Erweiterungen.
Für Erweiterungen sieht das so aus:
My apologies. Embarrassing. I got mixed up with my other post running here about not receiving browser update notifications.
Entschuldigung. Peinlich. Ich habe das mit meinem anderen Beitrag hier verwechselt, in dem es darum ging, dass ich keine Benachrichtigungen über Browser-Updates erhalte.
Of course, you want this deselected when using the script.
Natürlich sollte diese Option deaktiviert sein, wenn Sie das Skript verwenden
juzzlukin It will now take a few days until I can implement my idea.
Be patient.
Sorry about the previous post. I deleted it. Take all the time you need. Thanks.
Yes![]()
Please test it.
// Atomatk-Addons-UpDate-Check.uc.js
// Das Script führt automatisch einen UpDate-Check aus und dies in einem neuen Tab anzeigt.
// Auch wird ein Button erstellt, der einen UpDate-Check ausführt und dies in einem neuen Tab anzeigt.
// Source file https://www.camp-firefox.de/forum/thema/140656/?postID=1290593#post1290593
/* ----------------------------------------------------------------------------------- */
/* Zu beachten ist, dass die Grafiken sich im richtigen Ordner befinden müssen */
/* %appdata%\Mozilla\Firefox\Profiles\"Profilname"\chrome\icons */
/* ----------------------------------------------------------------------------------- */
(function() {
"use strict";
// Nur in einem normalen Browserfenster weiterarbeiten.
if (!window.gBrowser) return;
const
// ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
id = 'addons-update-button', // Id des Buttons
link = 'about:addons', // Linkziel des Buttons
label = 'Add-ons Update', // Bezeichnung des Buttons
tooltiptext = 'Add-ons aktualisieren',
// Icon-------------------------------------------------------
icon = 'sync.svg', // [Name.Dateiendung] des Symbols
colour = '#8bff0f', // Farbe für das SVG-Icon setzen
iconPath = '/chrome/icons/', // Pfad zum Ordner der das Icon beinhaltet
// ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
// SVG-Icons können CSS-Farbangaben übernehmen; das schaltet Firefox dafür frei.
if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) {
Services.prefs.setBoolPref('svg.context-properties.content.enabled', true );
}
const
// ■■ START ScriptConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
STARTUP_DELAY_MS = 2500, // Verzögerung nach Firefox-Start, damit die Oberfläche fertig geladen ist.
MAX_WAIT_MS = 12000, // Maximale Wartezeit darauf, dass about:addons vollständig geladen ist.
POLL_MS = 250; // Intervall für wiederholte Prüfungen.
let
startupDone = false, // Merkt sich, ob der Startvorgang schon einmal ausgeführt wurde.
busy = false; // Verhindert parallele Abläufe.
// ■■ END ScriptConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//BUTTON
try {
CustomizableUI.createWidget({
id: id,
defaultArea: CustomizableUI.AREA_NAVBAR,
label: label,
tooltiptext: tooltiptext,
onCreated: (button) => {
button.style.MozContextProperties = 'fill, stroke, fill-opacity';
button.style.listStyleImage = 'url("' + curProfDir + iconPath + icon + '")';
button.style.minWidth = 'fit-content';
// button.style.color = '#ffe10f'; // Farbe für das SVG-Icon setzen
button.style.color = colour;
}
});
} catch(e) {};
// Liefert das aktuellste Browserfenster.
function getBrowserWindow() {
return Services.wm.getMostRecentWindow("navigator:browser");
}
// Öffnet about:addons in einem neuen Tab.
function openAddonsTab(win) {
if (!win) return false;
try {
win.openTrustedLinkIn(link, "tab");
return true;
} catch (e) {
return false;
}
}
// Schließt den Tab nach 30s, wenn keine Updates gefunden wurden.
function checkAndCloseIfNoUpdates(doc, win) {
const messageEl = doc.getElementById('updates-message');
if (messageEl && messageEl.getAttribute('state') === 'none-found') {
win.setTimeout(() => {
try {
win.gBrowser.removeCurrentTab();
} catch (e) {}
}, 2000); // 30 Sekunden 30000
}
}
// Prüft, ob die Update-Elemente in about:addons schon vorhanden sind.
function runOriginalAddonActions(doc, win) {
try {
const
options = doc.querySelector("addon-page-options"),
checkItem = doc.querySelector('panel-item[action="check-for-updates"]');
// Update-Prüfung auslösen.
if (options && checkItem) {
checkItem.click();
}
// Kurz warten, damit Firefox die Ergebnisse sichtbar aufbauen kann.
win.setTimeout(function() {
try {
const categories = doc.getElementById("categories");
if (categories) {
const availableBtn = categories.querySelector('button[viewid="addons://updates/available"]');
if (availableBtn) availableBtn.click();
// 500ms warten, dann einmal prüfen
win.setTimeout(() => checkAndCloseIfNoUpdates(doc, win), 500);
}
} catch (e) {}
busy = false;
}, 500);
/*
win.setTimeout(function() {
try {
const categories = doc.getElementById("categories");
if (categories) {
const availableBtn = categories.querySelector('button[viewid="addons://updates/available"]');
if (availableBtn) availableBtn.click();
}
} catch (e) {}
busy = false;
}, 500); // Timeout auf 500ms erhöht für zuverlässigen Wechsel
*/
} catch (e) {
busy = false;
}
}
/*
function runOriginalAddonActions(doc, win) {
try {
const
options = doc.querySelector("addon-page-options"), // Bereich für die Add-ons-Optionen.
checkItem = doc.querySelector('panel-item[action="check-for-updates"]'), // Menüpunkt "Check for Updates".
recentItem = doc.querySelector('panel-item[action="view-recent-updates"]'); // Menüpunkt "View Recent Updates".
// Erst die Ansicht der letzten Updates öffnen.
if (options && recentItem) {
recentItem.click();
}
// Danach die Update-Prüfung auslösen.
if (options && checkItem) {
checkItem.click();
}
// Kurz warten, damit Firefox die Ergebnisse sichtbar aufbauen kann.
win.setTimeout(function() {
try {
const categories = doc.getElementById("categories");
if (categories) {
const
// Kategorie "recent updates" anklicken.
recentBtn = categories.querySelector('button[viewid="addons://updates/recent"]'),
// Kategorie "available updates" anklicken.
availableBtn = categories.querySelector('button[viewid="addons://updates/available"]');
if (recentBtn) recentBtn.click();
if (availableBtn) availableBtn.click();
}
} catch (e) {}
// Freigabe für neue Aktionen.
busy = false;
}, 50); // hier stand vorher 1500
} catch (e) {
busy = false;
}
}
*/
// Wartet, bis about:addons vollständig geladen ist.
function waitForAboutAddons(win, fromStartup) {
const started = Date.now();
function tick() {
let doc = null;
try {
doc = win.gBrowser.selectedBrowser.contentDocument;
} catch (e) {}
// Nur weitermachen, wenn about:addons wirklich geöffnet ist.
if (doc && doc.URL === "about:addons") {
try {
const
// Prüfen, ob die erwarteten UI-Elemente schon vorhanden sind.
options = doc.querySelector("addon-page-options"),
checkItem = doc.querySelector('panel-item[action="check-for-updates"]'),
recentItem = doc.querySelector('panel-item[action="view-recent-updates"]');
// Wenn alles da ist, die eigentliche Update-Logik starten.
if (options && checkItem && recentItem) {
runOriginalAddonActions(doc, win);
return;
}
} catch (e) {}
}
// Weiter warten, solange das Zeitlimit nicht überschritten ist.
if (Date.now() - started < MAX_WAIT_MS) {
win.setTimeout(tick, POLL_MS);
} else {
// Wenn die Zeit abgelaufen ist, wieder freigeben.
busy = false;
// Beim Start nicht weiter forcieren.
if (!fromStartup) {
openAddonsTab(win);
}
}
}
tick();
}
// Gemeinsame Hauptfunktion für Start und Button.
function runCheck(fromStartup) {
if (busy) return;
busy = true;
const win = getBrowserWindow();
if (!win) {
busy = false;
return;
}
// Erst Tab öffnen.
if (!openAddonsTab(win)) {
busy = false;
return;
}
// Danach auf fertige Seite warten.
waitForAboutAddons(win, fromStartup);
}
// Startprüfung nur einmal ausführen.
function runStartupCheck() {
if (startupDone) return;
startupDone = true;
const win = getBrowserWindow();
if (!win) return;
// Kleine Verzögerung, damit Firefox vollständig bereit ist.
win.setTimeout(function() {
runCheck(true);
}, STARTUP_DELAY_MS);
}
// Observer für den Zeitpunkt, an dem Firefox die Fenster wiederhergestellt hat.
function onWindowsRestored(subject, topic) {
if (topic !== "sessionstore-windows-restored") return;
try {
Services.obs.removeObserver(onWindowsRestored, "sessionstore-windows-restored");
} catch (e) {}
runStartupCheck();
}
// Observer registrieren.
try {
Services.obs.addObserver(onWindowsRestored, "sessionstore-windows-restored");
} catch (e) {
// Falls der Observer nicht verfügbar ist, per Timer versuchen.
window.setTimeout(runStartupCheck, STARTUP_DELAY_MS);
}
// Button-Klick-Handler einrichten.
(function click_button() {
const button = document.getElementById(id);
if (button) {
button.addEventListener("click", (event) => {
// Nur linker Mausklick.
if (event.button !== 0) return;
// Das richtige Browserfenster ermitteln.
const win = event.target.documentGlobal || event.target.ownerGlobal;
// Keine parallelen Läufe.
if (busy) return;
busy = true;
// Verhalten wie beim Start: Tab öffnen und dann prüfen.
if (!openAddonsTab(win)) {
busy = false;
return;
}
waitForAboutAddons(win, false);
});
} else {
// Wenn der Button noch nicht existiert, erneut probieren.
setTimeout(click_button, 100);
}
})();
})();
Alles anzeigen
Wenn Du Anpassungen wünschst,
z.B, ein integriertes Symbol für den Button,
oder was auch immer, lass es mich wissen.
If you'd like any customizations,
such as an integrated icon for the button,
or anything else, just let me know.
Please test it.
Ich bin zwar nicht gemeint, aber das funktioniert hier einwandfrei.
Hast du auch mal wieder sehr gut gemacht![]()
2002Andreas Danke.
Du glaubst gar nicht wie oft ich an dem Skript gebastelt habe!
Hier mal einen Tipp an alle, die auch mithilfe von KI "arbeiten".
Teilt den Dingern mit, dass sie auch auf Searchfox suchen sollen![]()
Es nutzt nix, wenn die alles was mit JS zu tun hat abgrasen, wenn sie
FFspezifisches nicht berücksichtigen. FuchsFan
2002 Andreas Danke.
You wouldn't believe how much I tinkered with the script!
Yes I would (believe it). Wish I had your skills. Outstanding 😎
Ja, das würde ich (glauben). Ich wünschte, ich hätte dein Können. Hervorragend 😁
Here's a tip for everyone who also "works" with the help of AI.
Tell these things to also search on Searchfox.![]()
It's no use if they scour everything related to JS, if they
Ignore FF-specific details. FoxFan
Wow. This is my first time hearing about Searchfox. Wish i had known sooner. How do we "Tell these things to also search on Searchfox"? I found the website. Is there a way to add a Searchfox search engine?
Wow. Das ist das erste Mal, dass ich von Searchfox höre. Hätte ich doch nur früher davon gewusst. Wie können wir „diesen Seiten mitteilen, dass sie auch auf Searchfox suchen sollen“? Ich habe die Website gefunden. Gibt es eine Möglichkeit, die Suchmaschine Searchfox hinzuzufügen?

juzzlukin Ich habe ganz einfach geschimpft wie ein Rohspatz und der KI an den Kopf geworfen, wie blöd sie doch ist.
Grast das ganze Internet ab, aber lässt die wichtigste Quelle aus!
Sie hat sich entschuldigt und mir fest versprochen auch in Zukunft diese Quelle in bedacht zu ziehen.
I just swore like a sailor and told the AI right to her face how stupid she is.
She scours the entire internet but leaves out the most important source!
She apologized and promised me she'd make sure to include that source in the future.
Searchfox
Alles anzeigenjuzzlukin Ich habe ganz einfach geschimpft wie ein Rohspatz und der KI an den Kopf geworfen, wie blöd sie doch ist.
Grast das ganze Internet ab, aber lässt die wichtigste Quelle aus!
Sie hat sich entschuldigt und mir fest versprochen auch in Zukunft diese Quelle in bedacht zu ziehen.I just swore like a sailor and told the AI right to her face how stupid she is.
She scours the entire internet but leaves out the most important source!
She apologized and promised me she'd make sure to include that source in the future.
https://searchfox.org/
I didn't realize that banshees cursed. Wish I was there to see it 😊. Learn something new every day
I discovered a slight abnormality I did not recognize this at first. Now, regardless of an available update or not, when i reboot, the browser opens to about:addons for several seconds, then to travels to the previous active tab. Do you see this as well?
Mir war gar nicht bewusst, dass Banshees fluchen. Ich wünschte, ich wäre dabei gewesen, um das zu sehen 😊. Man lernt jeden Tag etwas Neues.
Ich habe eine kleine Unregelmäßigkeit entdeckt, die mir zunächst nicht aufgefallen ist. Unabhängig davon, ob ein Update verfügbar ist oder nicht: Wenn ich den Computer neu starte, öffnet sich der Browser für einige Sekunden auf „about:addons“ und wechselt dann zum zuvor aktiven Tab. Ist das bei euch auch so?
EDIT: After a few more tries, I find that sometimes it returns to the previous active tab, and others times it stays at about:config
I discovered a slight abnormality I did not recognize this at first. Now, regardless of an available update or not, when i reboot, the browser opens to about:addons for several seconds, then to travels to the previous active tab. Do you see this as well?
Wenn der Firefox so konfiguriert ist, dass er auch bei Systemstart gestartet wird, ja.
EDIT: After a few more tries, I find that sometimes it returns to the previous active tab, and others times it stays at about:config
Mh, beobachte das mal weiter. Eventuell muss da noch etwas mit den Zeitschleifen nachgebessert werden.
Wenn der Firefox so konfiguriert ist, dass er auch bei Systemstart gestartet wird, ja.
Hallo Mira.
Ist er hier nicht, trotzdem kann ich das bestätigen.
Hallo Mira.
Ist er hier nicht, trotzdem kann ich das bestätigen.
Mist.
Kannst Du mir das noch mal genau erklären? Oder ein "Filmchen" davon machen?
In der Zwischenzeit werde ich mein Testprofil tausendmal öffnen und schließen.
Ma sehn.
PS. Wenn Updates anliegen, vorhanden sind, schließt sich der Tab auch nicht!
Soll er ja nicht.
Oder ein "Filmchen" davon machen?
So sieht das aus, wenn ich den Fx starte:
Wenn kein Update, dann schließt sich der Tab.
Wenn es ein Update gibt, dann wird das nach Start gleich ausgeführt, der Tab schließt sich dann nicht, und zeigt das so an:
Aha.
Aber das Verhalten ist doch so gewollt.
Wenn kein Update vorliegt, schließt sich der Tab doch.
Anders lässt sich das nicht umsetzen.
Hatte ja schon erwähnt, warum das Skript aus #1 nicht mehr funktioniert.
Sicherheit und Änderungen deshalb von Mozilla.
Aber das Verhalten ist doch so gewollt.
Ich dachte, es sollte sich nur dann ein neuer Tab öffnen, wenn es ein Update gibt![]()
Sollte ich das falsch verstanden haben, dann sorry.
Ihr könnt ja mal dieses Script testen, es prüft gleich nach dem Start, ob Updates vorhanden sind, gibt es sie, so wird in einem neuen Tab der Addonmanager geöffnet. Gibt es keine Updates, dann passiert weiter nichts.
// addonUpdateNotifier.uc.js
// Firefox 152+
(async function() {
if (location.href !== "chrome://browser/content/browser.xhtml")
return;
const { AddonManager } =
ChromeUtils.importESModule(
"resource://gre/modules/AddonManager.sys.mjs"
);
async function checkForUpdates() {
let foundUpdate = false;
let addons = await AddonManager.getAddonsByTypes(["extension"]);
for (let addon of addons) {
if (!(addon.permissions & AddonManager.PERM_CAN_UPGRADE))
continue;
await new Promise(resolve => {
addon.findUpdates({
onUpdateAvailable(aAddon, install) {
foundUpdate = true;
},
onNoUpdateAvailable() {},
onUpdateFinished() {
resolve();
}
}, AddonManager.UPDATE_WHEN_USER_REQUESTED);
});
if (foundUpdate)
break;
}
if (foundUpdate) {
let win = Services.wm.getMostRecentWindow("navigator:browser");
let tab = win.gBrowser.addTrustedTab(
"about:addons"
);
tab.linkedBrowser.addEventListener(
"DOMContentLoaded",
function listener() {
tab.linkedBrowser.removeEventListener(
"DOMContentLoaded",
listener
);
// "available-updates"
tab.linkedBrowser.loadURI(
Services.io.newURI(
"about:addons#updates"
)
);
},
{ once: true }
);
}
}
setTimeout(checkForUpdates, 10000);
})();
Alles anzeigen
dieses Script testen
Hallo FuchsFan
Skript installiert.
Alte Version von Stylus installiert.
Den Fx geschlossen...Neustart.
Eine Weile gewartet, nichts passiert.
Dann selber nach Updates gesucht...Stylus bekam sein Update![]()
Eine Weile gewartet, nichts passiert.
Ich hatte 6 fehlende Updates, nach Start wurde sofort about:addons im Tab geöffnet, alle Updates installiert, Firefox Neustart, keine Reaktion. ![]()
nach Start wurde sofort about:addons im Tab geöffnet
Erneuter Test.
2 alte Erweiterungen installiert. Den Fx beendet.
Neustart..nichts passiert...erst wenn ich selber danach suche![]()
Evtl. testet ja ein weiterer User das Skript mal.
Neustart..nichts passiert...erst wenn ich selber danach suche
Gerade einen andere Fox getestet, auch da funktionierte es, wie von mir angegeben. ![]()