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.
Beiträge von Mira_Belle
-
-
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. -
Ich greife in beiden Installationen auf dieselben Profile zu.
Warum?
Meiner Meinung nach ist es besser, Du würdest das eine BS konsequent vom anderen BS trennen!Die Profile das Profil auf dem einen BS hättest Du doch klonen können.
Aber sicher wird Dir da jemand antworten, der Dir das ganze viel besser erklären kann,
und warum eine solche Konstellation m.M. keine gute Idee ist
und eventuell genau für solche Probleme prädestiniert ist.
Zumal eine Einstellung in dem BS natürlich auch Auswirkungen auf den Firefox hat.
Sind diese auf den Systemen unterschiedlich, hast Du schon den Salat. -
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.
-
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 -
Da das alte Skript unter dem Firefox 152.0 nicht mehr funktionierte, habe ich mich mal wieder drann getraut.
JavaScript
Alles anzeigen//SkipToTopAndBottom.uc.js // Das Script erstellt im Kontextmenü zwei "Pfeile", nach oben und nach unten. // Mit diesen kann man schnell zum Anfang oder Ende einer Seite scrollen. // Source file https://www.camp-firefox.de/forum/thema/140683/?postID=1290621#post1290621 /* ----------------------------------------------------------------------------------- */ /* Zu beachten ist, dass die Grafiken sich im richtigen Ordner befinden müssen */ /* %appdata%\Mozilla\Firefox\Profiles\"Profilname"\chrome\icons */ /* ----------------------------------------------------------------------------------- */ //angepasst für Fx 152 (function() { let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); // Pfadangabe zum Profilordner let up = "arrow-up.svg"; let menuitem = document.createXULElement('menuitem'); menuitem.id = 'context-to-top'; menuitem.classList.add('menuitem-iconic'); menuitem.setAttribute('tooltiptext' , 'Zum Seitenanfang springen'); menuitem.style.setProperty('--menuitem-icon', 'url("' + ("file:" + ProfilePath + "/chrome/icons/" + up) + '")'); menuitem.addEventListener('click', (event) => { if (event.button == 0) { const win = Services.wm.getMostRecentWindow("navigator:browser"), browser = win.gBrowser.selectedBrowser, scrollScript = `content.scrollTo ({ top: 0, left: 0, behavior: "smooth"});`; browser.messageManager.loadFrameScript ( `data:,${encodeURIComponent(scrollScript)}`, false ); } }); let refItem = document.getElementById('context-reload'); refItem.parentNode.insertBefore(menuitem, refItem); })(); (function() { let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); // Pfadangabe zum Profilordner let down = "arrow-down.svg"; let menuitem = document.createXULElement('menuitem'); menuitem.id = 'context-to-bottom'; menuitem.classList.add('menuitem-iconic'); menuitem.setAttribute('tooltiptext' , 'Zum Seitenende springen'); menuitem.style.setProperty('--menuitem-icon', 'url("' + ("file:" + ProfilePath + "/chrome/icons/" + down) + '")'); menuitem.addEventListener('click', (event) => { if (event.button == 0) { const win = Services.wm.getMostRecentWindow("navigator:browser"), browser = win.gBrowser.selectedBrowser, scrollScript = `content.scrollTo ({ top: 100000, left: 0, behavior: "smooth"});`; browser.messageManager.loadFrameScript ( `data:,${encodeURIComponent(scrollScript)}`, false ); } }); let refItem = document.getElementById('context-reload'); refItem.parentNode.insertBefore(menuitem, refItem); })(); -
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 -
Yes

Please test it.JavaScript
Alles anzeigen// 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); } })(); })();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. -
Das mit dem Skript hat mir dennoch keine Ruhe gelassen

Und da ich ja eigen bin, habe ich das ganze Skript umgebaut.
Mir gefällt das mit einem Bereich für Anwenderkonfigurationen einfach besser.
Auch weil da niemand mehr im eigentlichen Code "rumfummeln" muss.Ach, die ID musste ich ändern, da ich schon einen anderen Button mit dieser habe.
JavaScript
Alles anzeigen// QuickLinkButton.uc.js // Das Script erstellt einen Button, der bei Linksklick, mehrere Tabs // und bei Rechtsklich ein neues Fenster öffnet mit verschiedenen Webseiten. // Source file https://www.camp-firefox.de/forum/thema/140675/?postID=1290591#post1290591 /* ----------------------------------------------------------------------------------- */ /* Zu beachten ist, dass die Grafiken sich im richtigen Ordner befinden müssen */ /* %appdata%\Mozilla\Firefox\Profiles\"Profilname"\chrome\icons */ /* ----------------------------------------------------------------------------------- */ //angepasst für Fx 152 (function() { if (!window.gBrowser){ return; } let newWindow = null; const // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ id = 'link-button_2', // Id des Buttons Sinistra = [ 'https://www.ardmediathek.de/serie/morden-im-norden/staffel-12/Y3JpZDovL25kci5kZS80OTU1/12', 'https://www.ardmediathek.de/serie/mittendrin-flughafen-frankfurt/staffel-16/Y3JpZDovL2hyLW9ubGluZS8zODIyMDAzMw/16', 'https://www.zdf.de/serien/soko-koeln', 'https://www.daserste.de/unterhaltung/quiz-show/wer-weiss-denn-sowas/videos/index.html', ], Dextra = [ 'https://www.hr-fernsehen.de/tv-programm/index.html', 'https://www.swrfernsehen.de/tv-programm/index.html', 'https://www.wdr.de/programmvorschau/wdrfernsehen/uebersicht/index.html', ], label = 'Quicklink', // Bezeichnung des Buttons tooltiptext = 'Quicklink', // Icon------------------------------------------------------- icon = 'pug.svg', // [Name.Dateiendung] des Symbols colour = '#e0e0e0', // Farbe für das SVG-Icon setzen iconPath = '/chrome/icons/', // Pfad zum Ordner der das Icon beinhaltet curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir)); // Pfad zum Profil // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // Erlaubt korrekte .svg Icons Darstellung in allen UI Bereichen if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) { Services.prefs.setBoolPref('svg.context-properties.content.enabled', true ); } //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 = colour; } }); } catch(e) {}; (function click_button() { const button = document.getElementById(id); if (button) { button.addEventListener('click', function(event) { if (event.button == 0) { newWindow = null; Sinistra.forEach(url => { event.target.documentGlobal.openTrustedLinkIn(url, "tab"); }); } else if (event.button == 2) { event.preventDefault(); newWindow = OpenBrowserWindow(); setTimeout(() => { Dextra.forEach((url, index) => { newWindow.openTrustedLinkIn(url, index === 0 ? "current" : "tab"); }); }, 500); } }); } else { setTimeout(click_button, 100); } })(); })(); -
2002Andreas Entschuldige, dass ich Dir da nicht wirklich habe weiter helfen können.
Um so mehr freut es mich, dass Du selbst eine Lösung gefunden hast.
-
Muss noch mal nach haken!
Die neuen Tabs sollen sich bei Rechts, so wie bei Linksklick in einem neuen Fenster öffnen?
Oder nur die neuen Tabs bei Rechtsklick?
Oder nur bei Linksklick? -
Funktioniert DER so, wie Du Dir das vorstellst?
JavaScript
Alles anzeigen(function() { if (!window.gBrowser) return; const // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ id = 'link-button', // Id des Buttons label = 'Quicklink', // Bezeichnung des Buttons tooltiptext = '', // Icon------------------------------------------------------- icon = 'chronik7.png', // [Name.Dateiendung] des Symbols iconPath = '/chrome/icons/', // Pfad zum Ordner der das Icon beinhaltet curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir)); // Pfad zum Profil // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ // Erlaubt korrekte .svg Icons Darstellung in allen UI Bereichen if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) { Services.prefs.setBoolPref('svg.context-properties.content.enabled', true ); } //BUTTON try { CustomizableUI.createWidget({ id: id, defaultArea: CustomizableUI.AREA_NAVBAR, label: label, tooltiptext: tooltiptext, onCreated: (button) => { // Optik button.style.MozContextProperties = 'fill, stroke, fill-opacity'; button.style.listStyleImage = 'url("' + curProfDir + iconPath + icon + '")'; button.style.minWidth = 'fit-content'; button.style.color = colour; } }); } catch(e) {}; //click (function click_button() { const button = document.getElementById(id); if (button) { button.addEventListener('click', event => { if (event.button === 0) { openTrustedLinkIn('https://www.zdf.de/serien/soko-koeln',"tab"); openTrustedLinkIn('https://www.daserste.de/unterhaltung/quiz-show/wer-weiss-denn-sowas/videos/index.html',"tab"); } else if (event.button == 2) { openTrustedLinkIn('https://www.hr-fernsehen.de/tv-programm/index.html',"current"); openTrustedLinkIn('https://www.swrfernsehen.de/tv-programm/index.html',"tab"); openTrustedLinkIn('https://www.zdf.de/reportagen/abenteuer-auswandern-104',"tab"); } }); } else { setTimeout(click_button, 100); } })(); })(); -

Das war es! Danke.
-
-
Danke Andreas, aber das ist es auch nicht!
Über diesen Selektor bin ich auch schon gestolpert, aber keiner von denen ich dachte, dass es der sein könnte,
hat eine Veränderung gebracht, wenn ich ihn z.B. in rot "eingestellt" habe.Was mich ja total irritiert, ist der Umstand, wie die Voraussetzungen sein müssen, dass dieser blaue Rand zu sehen ist.
Firefox muss im Vordergrund sein und der Cursor muss im Adressfeld stehen.
Öffne ich die Browserwerkzeuge, ist ja dessen Fenster im Vordergrund und der blaue Rand dann nicht mehr Vorhanden!
Sobald ich aber den Fuchs wieder in den Vordergrund hole, ist dieser blöde Rand wieder da.Ach, und mit einem Theme hat das nicht zu tun, mehrere ausprobiert.
-
Habe eine blaue Umrandung um das Adressfeld,
aber nur, wenn der Cursor sich darinnen befindet.
Weis nicht wie ich das beschreiben soll.
Wenn ich nun mit den Browserwerkzeugen versuche, den Selektor dafür zu finden,
ist die Umrandung leider nicht sichtbar!
Das Fenster muss aktiv sein. Toll.Kann mir da jemand helfen? Ich will das weg haben.
Entweder transparent oder ganz weg (none, hidden oder was auch immer)
transparent, wäre natürlich besser, da ich damit ja mehr anstellen kann. -
Achtung
juzzlukinNicht die Updatefunktion von Firefox mit der, der Erweiterungen verwechseln.
Das hat nichts miteinander zu tun. -
Sorry, 2002Andreas wenn ich das nun abwürge, es geht ja eigentlich nicht um dieses Skript!
Eingangs gab es die Fragestellung, ob man das Skript von xiaoxiaoflood nicht wieder zum Laufen bringen könnte.
Kurz, nein.
Aus Sicherheitsgründen geht das so nicht mehr.
So wie ich das verstanden habe, wurde im Hintergrund auf Updates der Addons geprüft und nur dann,
also es kam da wohl auch darauf an wie die Einstellungen waren, entweder aktualisiert oder
eben die Page (about:addons) geöffnet.DAS funktioniert, wie gesagt aus Sicherheitsgründen, SO nicht mehr. (Wenn ich nicht irre)
Daher meine Idee des Skriptes aus #8.
Der Haken, die Page (about:addons) wird immer geöffnet UND, das ist der springende Hüpf,
bleibt offen, eben auch dann, wen es gar keine Updates gibt!
Das ganze off Topic hier, also mit den vielen anderen Versionen, alle mit dem gleichen Ziel,
hat mich aber auf eine Idee gebracht
Dafür muss ich mich mal bedanken, denn das ist mir gar nicht aufgefallen.
Die Schaltfläche

Rechts, neben dem Zahnrad. Fällt Euch was auf?Wenn keine Updates vorliegen, was steht denn dann da?
Und kann jemand meinem Gedankengang folgen?
juzzlukin Es wird nun ein paar Tage dauern, bis ich meine Idee umgesetzt bekomme.
Habe Geduld. -
Ah, dann habe ich es falsch verstanden.
Bei meinem Skript bleibt halt die Anzeige auf "Verfügbare Updates" stehen,
und der rechte Bereich ist halt leer.
Daher meine Verwunderung.
Gibt halt bei allen "Lösungen" klitzekleine Unterschiede. -