Wie kann ich denn jetzt das Suchfeld ansprechen,
Teste bitte, Farbe wenn dann anpassen:
Wie kann ich denn jetzt das Suchfeld ansprechen,
Teste bitte, Farbe wenn dann anpassen:
Vielen Dank!
gerne wie immer![]()
Ich habe es so abgeändert!
Wenn es so passt für dich, ok.
Die Nichtleerung nach Absenden der Suche ist auch noch ungelöst. Ist da schon jemand am rumtüfteln?
Das wäre mir aber noch fast wichtiger ! ![]()
Das wäre mir aber noch fast wichtiger!
Naja, du hast den Thread auf: Erledigt gesetzt.
Ansonsten heißt es abwarten, ob das jemand macht/kann![]()
Upps, ich hatte das gestern eigentlich wieder aufgehoben. Hatte wohl nicht geklappt. Jetzt nochmal .. ![]()
Ansonsten heißt es abwarten, ob das jemand macht/kann
Also ich habe mich mal daran versucht, aber Mozilla hat so viel geändert, dass ich es einfach nicht schaffe.
Da muss jemand ran, der sich auch mit den "Internas" auskennt.
Einfach das Skript umschreiben ist nicht![]()
Also ich habe mich mal daran versucht
Danke für den Versuch![]()
Da muss jemand ran..
Also abwarten, hat ja auch noch etwas Zeit.
Mein bisheriger Erguss, das Skript funktioniert nicht!
Aber eventuell bringt es ja jemanden auf die richtige Spur.
Wichtig![]()
Zur Unterstützung nutzte ich Perplexity, eine KI mit Internetzugriff, da ich Hilfe benötigte bei den Internas von Mozilla.
// ==UserScript==
// @name Suchfeld (searchbar-new) automatisch leeren
// @description Leert die zweite Adressleiste (moz-urlbar mit id="searchbar-new")
// @include chrome://browser/content/browser.xhtml
// ==/UserScript==
(function() {
if (location.href !== "chrome://browser/content/browser.xhtml") return;
// Container der zweiten Leiste
const container = document.getElementById("search-container");
if (!container) return;
// Die „Suchleiste“ ist ein moz-urlbar
const urlbar = container.querySelector("html\\:moz-urlbar#searchbar-new") ||
document.querySelector("html\\:moz-urlbar#searchbar-new");
if (!urlbar) return;
// Eingabefeld aus Shadow DOM oder Fallback
const input =
urlbar.shadowRoot?.querySelector("input") ||
urlbar.querySelector("input");
if (!input) return;
/* ------------------------------------------
* 1. Suchfeld nach 4 Sekunden automatisch leeren
* ------------------------------------------ */
let tId;
input.addEventListener("input", () => {
clearTimeout(tId);
tId = setTimeout(() => {
input.value = "";
if (typeof urlbar.value === "string") {
urlbar.value = "";
}
}, 4000);
});
/* ------------------------------------------
* 2. Suchfeld sofort nach Start der Suche leeren
* (Enter in dieser Leiste)
* ------------------------------------------ */
input.addEventListener("keydown", (e) => {
if (e.key === "Enter") {
// Kurz warten, damit die eigentliche Suche/Navigation losläuft
setTimeout(() => {
input.value = "";
if (typeof urlbar.value === "string") {
urlbar.value = "";
}
}, 200);
}
});
})();
Alles anzeigen
Ich vermute den Fehler in der Einbindung von "
Zur Unterstützung nutzte ich Perplexity, eine KI mit Internetzugriff, da ich Hilfe benötigte bei den Internas von Mozilla.
Ein Bekannter hat Perplexity in letzter Zeit auch ab und zu probiert; das ist zwar besser als Chat Gpt, analysiert aber nicht den Firefox Code an sich, sondern nur externe Referenzen zum jeweiligen Thema und Zusammenhang.
D.h., wenn nicht jemand ausserhalb von Mozilla was dazu geschrieben hat, kannste das Ganze knicken. ![]()
Ich komme da einfach nicht weiter!
Mit dieser Version wird zwar der Inhalt nach Enter gelöscht,
aber es lassen sich danach weder Adressfeld noch Suchfeld weiter benutzen!
console.log("🔥 SUCHFELD ULTRA FIX!");
setInterval(() => {
// const input = document.getElementById('#searchbar-new #urlbar-input');
const input = document.getElementById("urlbar-input");
// const input = document.getElementById("html:input#urlbar-input.urlbar-input textbox-input");
if (input && input.value.length > 0) {
console.log("💥 LEERE JETZT:", input.value);
// Mehrere Methoden gleichzeitig:
input.value = "";
input.setAttribute("value", "");
input.textContent = "";
// Auch Parent leeren (moz-urlbar)
const urlbar = document.getElementById("searchbar-new");
if (urlbar) {
urlbar.value = "";
urlbar.setAttribute("value", "");
}
// Event triggern
input.dispatchEvent(new Event('input', {bubbles: true}));
input.dispatchEvent(new Event('change', {bubbles: true}));
}
}, 500); // Alle 0.5 Sekunden checken
Alles anzeigen
Die anderen Zeilen adressieren zwar das Suchfeld genauer, aber es wird dann eben nicht mehr geleert!
Boersenfeger Was hältst Du davon?
(function() {
setInterval(() => {
const input = document.getElementById("urlbar-input");
if (input && input.value.length > 0) {
const urlbar = document.getElementById("searchbar-new");
if (urlbar) {
urlbar.value = "";
urlbar.setAttribute("value", "");
}
// Event triggern
// input.dispatchEvent(new Event('change', {bubbles: true}));
}
}, 500); // Alle 0.5 Sekunden checken
let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
let uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
.searchmode-switcher-icon {
list-style-image: url("chrome://global/skin/icons/search-glass.svg") !important;
fill: #ffaa00 !important;
}
`), null, null);
sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
})();
Alles anzeigen
Es ist noch nicht perfekt, aber ein Anfang!
In das Suchfeld einen Begriff eingeben und nach Bestätigung wird der Begriff im Suchfeld wieder gelöscht,
aber die Suche wird dennoch nach dem Begriff gestartet.
Was hatte das alte Skript noch für eine Funktion?
Code jede halbe Sekunde auszuführen und jedes Mal neu die Elemente aus dem DOM lesen, klingt aus Performance-Sicht furchtbar. Verwendete DOM-Selektoren sollten einmalig gelesen und Code auch nur dann ausgeführt werden, wenn es einen Anlass dazu gibt, sprich auf ein Event hören, statt einfach durchgehend Arbeit auszuführen, die in 99,9999 Prozent der Firefox-Nutzung komplett unnötig ist. Das hat das Original-Script ja auch nicht getan.
Was hatte das alte Skript noch für eine Funktion?
Ich bin zwar nicht gemeint, aber:
Suchwort eingeben..Suche aber nicht starten..Suchwort wird nach vorgegebener Zeit wieder entfernt.
Suchwort eingeben..Suche starten..Suchwort wird sofort entfernt.
2002Andreas Danke für die Antwort.
Suchwort eingeben..Suche starten..Suchwort wird sofort entfernt.
Das funktioniert ja.
Suchwort eingeben..Suche aber nicht starten..Suchwort wird nach vorgegebener Zeit wieder entfernt.
OK, da muss ich dann noch ran!
Wie wäre es damit?
Suchwort eingeben. Suche starten. Suchwort wird sofort entfernt. Check!
Suchwort eingeben. Suche aber nicht starten. Suchwort wird nach 4 Sekunden entfernt.
Wichtig![]()
Zur Unterstützung habe ich Perplexity genutzt!
(function() {
setInterval(() => {
const input = document.getElementById("urlbar-input");
if (input && input.value.length > 0) {
const urlbar = document.getElementById("searchbar-new");
if (urlbar) {
urlbar.value = "";
urlbar.setAttribute("value", "");
}
}
}, 500); // Alle 0.5 Sekunden checken
let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
let uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
.searchmode-switcher-icon {
list-style-image: url("chrome://global/skin/icons/search-glass.svg") !important;
fill: #ffaa00 !important;
}
`), null, null);
sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
// ---- Suchbegriff nach vorgegebener Zeit löschen ----
function autoClearSearchbarAfterDelay() {
const DELAY = 4000; // 4 Sekunden Verzögerung
const searchbar = document.getElementById("searchbar-new");
if (!searchbar) return;
let timeout;
// Wenn der Benutzer etwas eingibt
searchbar.addEventListener("input", () => {
clearTimeout(timeout);
if (searchbar.value.trim() !== "") {
timeout = setTimeout(() => {
// Nur löschen, wenn noch Text da ist (keine Zwischenänderung)
if (searchbar.value.trim() !== "") {
searchbar.value = "";
searchbar.setAttribute("value", "");
// Event auslösen, damit UI aktualisiert
searchbar.dispatchEvent(new Event('input', { bubbles: true }));
}
}, DELAY);
}
});
// Optional: Wenn der Benutzer Enter drückt (Suche startet) → Timeout abbrechen
searchbar.addEventListener("keydown", (e) => {
if (e.key === "Enter") clearTimeout(timeout);
});
}
// Funktion nach kurzer Verzögerung aktivieren (sobald das Feld existiert)
setTimeout(autoClearSearchbarAfterDelay, 1000);
})();
Alles anzeigen
Käse, da ist noch ein Bug vorhanden!
Funktioniert nicht richtig, wenn eine Seite geöffnet ist.
Wenn ich den Code richtig interpretiere, hast du den Einwand von Sören aus #33 nicht beachtet... ![]()
Wenn ich den Code richtig interpretiere, hast du den Einwand von Sören aus #33 nicht beachtet...
Gelesen, aber einfach mal ignoriert!
Bin erst einmal froh, dass der erste Teil des Skripts überhaupt funktioniert!
Aber ja, ich muss da noch ran.
Ist das ok so?
(function() {
if (!window.gBrowser)
return;
//Settings ---->
const waitingToClear = 4000; //Zeitangabe für Löschen der Eingabe: [Wert] in ms oder [0] kein automisches Löschen.
//<--- Settings
function clearSearchbar() {
let searchbar = document.getElementById('searchbar-new');
if(searchbar) {
let textbox = searchbar.inputField;
textbox.addEventListener("keydown", function(event) {
if( event.key == "Enter" ) {
setTimeout( function() {
textbox.value = '';
},500);
}
});
var idTimeOut;
if(waitingToClear > 0) {
textbox.addEventListener('input', function() {
clearTimeout(idTimeOut);
idTimeOut = setTimeout(function() {
textbox.value = '';
},waitingToClear);
});
}
}
}
setTimeout(clearSearchbar,1000);
})();
Alles anzeigen
Sollte jetzt die alte Funktionalität wiederherstellen. Das hidePopup() im Skript aus #1 funktioniert ja schon seit mindestens der FF140-Version nicht mehr. Ich könnte die Funktionalität noch hinzufügen, dann wird es aber mit dem Focus schwierig.
Verstehe immer noch nicht warum im Originalskript die Suchfunktion aus den mozilla-Sourcen kopiert, verändert und dann gesondert aufgerufen wurde. Aber vielleicht habe ich auch etwas übersehen...![]()
Ist das ok so?
Fast!
Dein Skript, bzw. dessen Funktion, bewirkt ja nur, dass das Suchfeld geleert wird, wenn die Suche nicht gestartet wird.
Oder liege ich da falsch?