Der Pfeil wird damit hier nicht angezeigt:
Teste mal dieses bitte, das andere war aus einem Testprofil:
CSS
// ==UserScript==
// @name Searchbar Auto-Clear + Go-Pfeil (Firefox 150+)
// @description Auto-leeren + sichtbarer Go-Pfeil
// @include chrome://browser/content/browser.xhtml
// @async true
// @version 2026/03/12
// ==/UserScript==
(function() {
const waitingToClear = 15000; // Zeit bis automatisches Löschen (ms) | 0 = deaktiviert
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
SearchService: "moz-src:///toolkit/components/search/SearchService.sys.mjs",
});
// === CSS für Go-Pfeil ===
if (Services.prefs.getBoolPref("browser.search.widget.new", false)) {
let style = `
#searchbar-new {
.urlbar-go-button {
display: flex !important;
opacity: 0.8 !important;
cursor: pointer !important;
&:hover {
opacity: 1 !important;
}
&:not(:hover) {
opacity: 0.8 !important;
}
}
}
`;
let sss = Cc["@mozilla.org/content/style-sheet-service;1"]
.getService(Ci.nsIStyleSheetService);
// makeURI ist veraltet → Services.io.newURI benutzen
let uri = Services.io.newURI(
"data:text/css;charset=UTF-8," + encodeURIComponent(style)
);
if (!sss.sheetRegistered(uri, sss.AGENT_SHEET)) {
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
}
}
// === AUTO-CLEAR + GO-BUTTON ===
function initSearchbar() {
let searchbar = window.document.getElementById("searchbar-new");
if (!searchbar || searchbar.dataset.autoClearAttached) return;
searchbar.dataset.autoClearAttached = "true";
console.log("✅ Searchbar Auto-Clear + Go-Pfeil aktiviert");
const textbox = searchbar.inputField;
let timeoutId;
// 1. AUTO-CLEAR nach Timeout
if (waitingToClear > 0) {
textbox.addEventListener("input", () => {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => {
if (textbox.value.trim()) {
textbox.value = "";
textbox.dispatchEvent(new Event("input", { bubbles: true }));
console.log("⏰ Auto-Clear aktiviert");
}
}, waitingToClear);
});
}
// 2. ENTER → Clear nach Suche
textbox.addEventListener("keydown", (event) => {
if (event.keyCode === KeyEvent.DOM_VK_RETURN && textbox.value.trim()) {
setTimeout(() => {
textbox.value = "";
textbox.dispatchEvent(new Event("input", { bubbles: true }));
console.log("↵ Enter → Geleert");
}, 200);
}
}, false);
// 3. GO-BUTTON Patch
searchbar.goButton?.addEventListener("click", patchEmptySearch, false);
textbox.addEventListener("keydown", patchEmptySearch, false);
}
// === LEER-SUCHE ermöglichen ===
async function patchEmptySearch(event) {
if (KeyboardEvent.isInstance(event) && event.keyCode !== KeyEvent.DOM_VK_RETURN)
return;
let searchbar = window.document.getElementById("searchbar-new");
if (searchbar.value !== "") return;
if (!event.originalTarget.classList.contains("urlbar-input") &&
!event.originalTarget.classList.contains("urlbar-go-button"))
return;
let searchMode = searchbar.searchMode;
let engine;
if (!searchMode) {
engine = await lazy.SearchService.getDefault();
} else {
let label = searchMode.engineName;
engine = await lazy.SearchService.getEngineByName(label);
}
let where = whereToOpen(event);
let url = engine.searchForm;
window.openTrustedLinkIn(url, where);
}
function whereToOpen(aEvent) {
let where = "current";
const newTabPref = Services.prefs.getBoolPref("browser.search.openintab", false);
if (aEvent?.originalTarget.classList.contains("urlbar-go-button")) {
where = BrowserUtils.whereToOpenLink(aEvent, false, true);
if (newTabPref && !aEvent.altKey && where == "current" && !gBrowser.selectedTab.isEmpty) {
where = "tab";
if ((KeyboardEvent.isInstance(aEvent) && aEvent.ctrlKey) ||
(MouseEvent.isInstance(aEvent) && aEvent.button == 1))
where = "tabshifted";
}
}
return where;
}
// === START ===
setTimeout(initSearchbar, 1000);
new MutationObserver(initSearchbar).observe(document, {
childList: true,
subtree: true
});
})();
Alles anzeigen
