Halle bege
Kann ich gerne machen.
Würde vorschlagen mein vorhandenes mit obigem ersetzen.
Was meinst Du - Ihr?
Mfg.
Endor
Halle bege
Kann ich gerne machen.
Würde vorschlagen mein vorhandenes mit obigem ersetzen.
Was meinst Du - Ihr?
Mfg.
Endor
Halle bege
Kann ich gerne machen.
Würde vorschlagen mein vorhandenes mit obigem ersetzen.
Was meinst Du - Ihr?Mfg.
Endor
Von mir aus gerne, ich hatte es ja per CSS so geändert und habe jetzt die neue Version übernommen. Ich weiß nicht, ob das bei jemand anderem Probleme bereitet.
bege
erledigt:
Mfg.
Endor
erledigt:
v139 v140 das Skript funktioniert überhaupt nicht, andere Skripte und Stile deaktiviert
Funktioniert Skript aus Beitrag #23 von BrokenHeart + eingebettetes css aus Beitrag #28 von 2002Andreas
v139 v140 das Skript funktioniert überhaupt nicht
Funktioniert hier einwandfrei.
Die Fehlermeldung erscheint hier allerdings auch.
Mit dem Skript aus Beitrag Nr. 23 gibt es allerdings keine Fehlermeldung.
Funktioniert hier einwandfrei.
Ich habe den Grund gefunden. Beim Ausführen des Skripts in der Konsole erscheint der zusätzliche Button nicht. Beim normalen Aktivieren des Skripts erscheint der Button, das Skript funktioniert.
Die Fehlermeldung erscheint hier allerdings auch.
Ich bestätige
Mit dem Skript aus Beitrag Nr. 23 gibt es allerdings keine Fehlermeldung.
Ich bestätige
Die Fehlermeldung erscheint hier allerdings auch.
Die Fehlermeldung document.getElementById(...) is null habe ich bei vielen Skripten, die wie dies hier trotzdem funktionieren. Für mich nur eines von vielen Javascript-Rätseln. 😉
habe ich bei vielen Skripten
Das Skript müsste angepasst werden. In dem aus Beitrag Nr. 23 gibt es nämlich keine.
Die Fehlermeldung erscheint hier allerdings auch.
Die Fehlermeldung document.getElementById(...) is null habe ich bei vielen Skripten, die wie dies hier trotzdem funktionieren. Für mich nur eines von vielen Javascript-Rätseln. 😉
Diese Fehlermeldung gibt's hier ab und zu bei eigenen Buttons (die sonst funktionieren), die in's Symbolleiste Anpassen Fenster gezogen wurden, also nicht in einer Toolbar sitzen.
Oder halt wenn ein Element/ID sonstwie nicht gefunden werden kann, aber dann funktioniert hier das Script generell nicht.
Das Skript müsste angepasst werden. In dem aus Beitrag Nr. 23 gibt es nämlich keine.
Mit diesem Code aus dem verlinkten Skript - eingefügt unter der Konfiguration - verschwindet die Fehlermeldung.
An der Funktion ändert sich dadurch nichts, es gibt eben eine Fehlermeldung weniger. Wie gesagt gibt es diese Fehlermeldung bei einer ganzen Reihe von Skripten bei mir, die alle funktionieren, u.a. welche von alice0775.
Sören Hentzschel Kannst du zu diesen Fehlermeldungen etwas sagen?
Die Fehlermeldung document.getElementById(...) is null habe ich bei vielen Skripten, die wie dies hier trotzdem funktionieren. Für mich nur eines von vielen Javascript-Rätseln. 😉
An der Funktion ändert sich dadurch nichts, es gibt eben eine Fehlermeldung weniger. Wie gesagt gibt es diese Fehlermeldung bei einer ganzen Reihe von Skripten bei mir, die alle funktionieren, u.a. welche von alice0775.
Das hatte ich in #16 erklärt:
ZitatDer Fehler wird ausgegeben, weil bei Start des Scripts der entsprechende Save-Dialog noch nicht vorhanden ist.
...und damit auch der Button noch nicht existiert.
Ist in diesem Fall auch nicht weiter tragisch, da die entsprechende Funktion ja bei einem Download nochmal aufgerufen wird und dann existiert auch der Dialog...
Auch, wenn Scripts ansonsten zu funktionieren scheinen, empfehle ich, solche Fehler zu beheben. Denn man kann nicht grundsätzlich ausschließen, dass nach Auftreten eines Fehlers nicht irgendwelche Dinge nicht mehr korrekt ausgeführt werden. Und selbst, wenn es keine Probleme gibt, wird ja nur das Entdecken tatsächlicher Probleme erschwert, wenn in der Konsole unnötige Fehlermeldungen erscheinen.
Auch, wenn Scripts ansonsten zu funktionieren scheinen, empfehle ich, solche Fehler zu beheben. Denn man kann nicht grundsätzlich ausschließen, dass nach Auftreten eines Fehlers nicht irgendwelche Dinge nicht mehr korrekt ausgeführt werden. Und selbst, wenn es keine Probleme gibt, wird ja nur das Entdecken tatsächlicher Fehler erschwert, wenn in der Konsole unnötige Fehlermeldungen erscheinen.
Ich habe versucht, das auf andere Skripte mit diesem Fehler zu übertragen. Bei Skripten, die sich auf Elemente aus einem anderen Skript beziehen, bekomme ich den Fehler, obwohl das Element des ersten Skripts definitiv bei der Ausführung des zweiten Skript vorhanden ist. (setTimeout so lang, dass ich sehen kann, wie das zweite Skript ausgeführt wird während das Element des ersten Skripts bereits vorhanden ist: Beispiel platzieren eines Buttons in der vom ersten Skript erzeugten Addonbar. Dennoch kommt für das zweite Skript der Fehler, dass die ID der Addonbar null ist, während der Button genau dort platziert wird.)
Woran liegt das?
So sefinitiv ist das wohl nicht, Fehlermeldungen lügen nicht. Es wäre vermutlich hilfreich, wenn du den Code teilen würdest, um den es geht.
Woran liegt das?
Konkret kann man das natürlich nicht bei jedem Skript sagen, aber wenn du verhinderst, dass das Skript zweimal aufgerufen wird, dann sollten sich solche Fehler in aller Regel vermeiden lassen. Daher bei jedem Skript z.B. diesen Code am Anfang einfügen:
So sefinitiv ist das wohl nicht, Fehlermeldungen lügen nicht.
Es wäre vermutlich hilfreich, wenn du den Code teilen würdest, um den es geht.
Die Fehlermeldung
Zitat21:09:08.499 Uncaught TypeError: document.getElementById(...) is null
init file:///C:/Users/bege/AppData/Roaming/Mozilla/Firefox/Profiles/487kit50.Quantum/chrome/JS/VersionInAddonBar.uc.js:34
<anonymous> file:///C:/Users/bege/AppData/Roaming/Mozilla/Firefox/Profiles/487kit50.Quantum/chrome/JS/VersionInAddonBar.uc.js:37
VersionInAddonBar.uc.js:34:18
Die Add-on Bar (ID wird in Zeile 120 definiert)
// Add-on Bar script for Firefox 126+ by Aris
//
// no 'close' button
// 'toggle' toolbar with 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS
// no 'Add-on Bar' entry in toolbar context menu
//
// option: smaller buttons / reduced toolbar button height
//
// flexible spaces on add-on bar behave like on old Firefox versions
// [!] Fix for WebExtensions with own windows by 黒仪大螃蟹 (for 1-N scripts)
var appversion = parseInt(Services.appinfo.version);
var compact_buttons = false; // reduced toolbar height and smaller buttons
var AddAddonbar = {
init: function() {
if (location != 'chrome://browser/content/browser.xhtml')
return;
/* blank tab workaround */
try {
if(gBrowser.selectedBrowser.getAttribute('blank')) gBrowser.selectedBrowser.removeAttribute('blank');
} catch(e) {}
try {
Services.prefs.getDefaultBranch('browser.addonbar.').setBoolPref('enabled',true);
} catch(e) {}
var addonbar_label = 'Add-on Bar';
var compact_buttons_code = '';
if(compact_buttons)
compact_buttons_code = `
#addonbar toolbarbutton .toolbarbutton-icon {
padding: 0 !important;
width: 16px !important;
height: 16px !important;
}
#addonbar .toolbarbutton-badge-stack {
padding: 0 !important;
margin: 0 !important;
width: 16px !important;
min-width: 16px !important;
height: 16px !important;
min-height: 16px !important;
}
#addonbar toolbarbutton .toolbarbutton-badge {
margin-top: 0px !important;
font-size: 5pt !important;
min-width: unset !important;
min-height: unset !important;
margin-inline-start: 0px !important;
margin-inline-end: 0px !important;
}
#addonbar .toolbaritem-combined-buttons {
margin-inline: 0px !important;
}
#addonbar toolbarbutton {
padding: 0 !important;
}
`;
// style sheet
Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).loadAndRegisterSheet(
Services.io.newURI('data:text/css;charset=utf-8,' + encodeURIComponent(`
#addonbar toolbarpaletteitem[place=toolbar][id^=wrapper-customizableui-special-spring],
#addonbar toolbarspring {
-moz-box-flex: 1 !important;
min-width: unset !important;
width: unset !important;
max-width: unset !important;
}
#main-window[customizing] #addonbar {
outline: 1px dashed !important;
outline-offset: -2px !important;
}
#addonbar {
border-top: 1px solid var(--sidebar-border-color,rgba(0,0,0,0.1)) !important;
background-color: var(--toolbar-bgcolor);
background-image: var(--toolbar-bgimage);
-moz-window-dragging: no-drag !important;
}
:root[lwtheme] #addonbar {
background: var(--lwt-accent-color) !important;
}
:root[lwtheme][lwtheme-image='true'] #addonbar {
background: var(--lwt-header-image) !important;
background-position: 0vw 50vh !important;
}
/* autohide add-on bar in fullscreen mode */
/*#main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar {
visibility: visible !important;
display: block !important;
min-height: 1px !important;
height: 1px !important;
max-height: 1px !important;
}
#main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar:hover {
min-height: 24px !important;
height: 24px !important;
max-height: 24px !important;
}*/
#unified-extensions-button[hidden]{
visibility: visible !important;
display: flex !important;
}
`+compact_buttons_code+`
`), null, null),
Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).AGENT_SHEET
);
// toolbar
try {
if(document.getElementById('addonbar') == null) {
var tb_addonbar = document.createXULElement('toolbar');
tb_addonbar.setAttribute('id','addonbar');
tb_addonbar.setAttribute('collapsed', 'false');
tb_addonbar.setAttribute('toolbarname', addonbar_label);
tb_addonbar.setAttribute('defaultset','spring,spring');
tb_addonbar.setAttribute('customizable','true');
tb_addonbar.setAttribute('mode','icons');
tb_addonbar.setAttribute('iconsize','small');
tb_addonbar.setAttribute('context','toolbar-context-menu');
tb_addonbar.setAttribute('lockiconsize','true');
tb_addonbar.setAttribute('class','toolbar-primary chromeclass-toolbar browser-toolbar customization-target');
document.getElementById('browser').parentNode.appendChild(tb_addonbar);
//tb_addonbar.insertBefore(document.querySelector('#statuspanel'),tb_addonbar.firstChild);
CustomizableUI.registerArea('addonbar', {legacy: true});
setTimeout(function(){
CustomizableUI.registerArea('addonbar', {legacy: true});
},2000);
CustomizableUI.registerToolbarNode(tb_addonbar);
// 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS to toggle add-on bar
var key = document.createXULElement('key');
key.id = 'key_toggleAddonBar';
key.setAttribute('key', '/');
key.setAttribute('modifiers', 'accel');
/*key.setAttribute('oncommand',`
var newAddonBar = document.getElementById('addonbar');
setToolbarVisibility(newAddonBar, newAddonBar.collapsed);
Services.prefs.getBranch('browser.addonbar.').setBoolPref('enabled',!newAddonBar.collapsed);
`);*/
key.addEventListener("command", () => {var newAddonBar = document.getElementById('addonbar');
setToolbarVisibility(newAddonBar, newAddonBar.collapsed);
Services.prefs.getBranch('browser.addonbar.').setBoolPref('enabled',!newAddonBar.collapsed);} );
document.getElementById('mainKeyset').appendChild(key);
try {
setToolbarVisibility(document.getElementById('addonbar'), Services.prefs.getBranch('browser.addonbar.').getBoolPref('enabled'));
} catch(e) {}
}
} catch(e) {}
}
}
/* initialization delay workaround */
document.addEventListener('DOMContentLoaded', AddAddonbar.init(), false);
/* Use the below code instead of the one above this line, if issues occur */
/*
setTimeout(function(){
AddAddonbar.init();
},2000);
*/
/* fix for downloads button on add-on bar - thanks to dimdamin */
/* https://github.com/Aris-t2/CustomJSforFx/issues/125#issuecomment-2506613776 */
(async url => !location.href.startsWith(url) || await delayedStartupPromise ||
(async (scrNT, nTjs) => {
if (scrNT.length >= 1) {
nTjs.uri = "data:application/x-javascript;charset=UTF-8,";
nTjs.res = await fetch(scrNT[0].src);
nTjs.src = (await nTjs.res.text())
.replace(/navigator-toolbox/, "addonbar_v")
.replace(/widget-overflow/, "addonbar");
(await ChromeUtils.compileScript(nTjs.uri + encodeURIComponent(nTjs.src))).executeInGlobal(this);
};
})(document.getElementById("navigator-toolbox").querySelectorAll(":scope > script"), {})
)("chrome://browser/content/browser.x");
Alles anzeigen
Das Skript, das einen Button in der Add-on Bar platziert und die Fehlermeldung erzeugt (die beanstandete ID wird in Zeile 18 definiert)
// ==UserScript==
// @name VersionInAddonBar.uc.js
// @description Versionsnummer in der Addon-Bar anzeigen
// @include main
// @charset UTF-8
// @note Basiert auf dem Script MemoryMonitorMod.uc.js und der Erweiterung "Version in Statusbar"
// @note Bit-Version aus https://www.camp-firefox.de/forum/thema/135247-anwendungsname-und-version-in-der-men%C3%BCleiste/
// @note In Zeilen 18 u. 19 die Toolbar und die Position (hinter welchem Element) auf der Toolbar anpassen.
// @note Ein Klick auf den Button öffnet das Fenster "Über Firefox".
// ==/UserScript==
setTimeout(function() {
var ucjsVN = {
init : function () {
let profile = Cc["@mozilla.org/toolkit/profile-service;1"].getService(Ci.nsIToolkitProfileService).currentProfile.name;
var Toolbar = 'addonbar';
var Position = 'customizableui-special-separator177';
// var Position = 'formhistory_yahoo_com-browser-action';
// var Position = 'textarea-cache-lite_wildsky_cc-browser-action';
var info = Components.classes['@mozilla.org/xre/app-info;1'].getService(Components.interfaces.nsIXULAppInfo);
var bit = (Services.appinfo.is64Bit ? 64 : 32);
var versionPanel = document.createXULElement('toolbaritem');
versionPanel.id = 'VersionDisplay';
versionPanel.setAttribute('tooltiptext', 'Versions-Nummer. Klick öffnet "Über ' + info.vendor + ' ' + info.name + '"');
versionPanel.addEventListener('click', function () {
openAboutDialog();
});
versionPanel.style.paddingTop = '4px';
var label = document.createXULElement('label');
label.setAttribute('value', "v" + info.version + " (" + bit + "bit)" + " [" + profile + "]");
versionPanel.appendChild(label);
document.getElementById(Toolbar).insertBefore(versionPanel, document.getElementById(Position).nextSibling);
},
}
ucjsVN.init();
}, 3000);
Alles anzeigen
Woran liegt das?
Konkret kann man das natürlich nicht bei jedem Skript sagen, aber wenn du verhinderst, dass das Skript zweimal aufgerufen wird, dann sollten sich solche Fehler in aller Regel vermeiden lassen. Daher bei jedem Skript z.B. diesen Code am Anfang einfügen:
Tatsächlich verschwindet die Fehlermeldung dadurch bei diesem Skript. Ich verstehe aber noch nicht, warum. Was meinst du mit "zweimal aufgerufen"? Passiert das bei dem Skript? Und trotz einer auch sehr langen timeout-Zeit?
Edit: Mit einem anderen Skript habe ich es auch probiert. Ist für einen Nur-Bastler wie mich nicht einfach, die richtige Stelle dafür zu finden. Ganz am Anfang funktioniert es nicht immer, das legt mitunter das ganze Skript lahm. Aber mit probieren habe ich es herausgefunden.
Tatsächlich verschwindet die Fehlermeldung dadurch bei diesem Skript. Ich verstehe aber noch nicht, warum. Was meinst du mit "zweimal aufgerufen"? Passiert das bei dem Skript? Und trotz einer auch sehr langen timeout-Zeit?
Ja! Jedes Skript wird über die von uns verwendete UserChrome-Logik zweimal aufgerufen. Warum das im Detail so ist, kann ich jetzt auch nicht sagen, müsste ich mir nochmal anschauen. aborix könnte das sicher .
Der Aufruf des Skripts ist ja in der Konsole auch doppelt vorhanden.
Ganz am Anfang funktioniert es nicht immer, das legt mitunter das ganze Skript lahm.
Ja, da war ich zu ungenau, sorry. Es sollte innerhalb der ersten aufgerufenen Funktion, also vor der ersten wirklichen Anweisung stehen. Meistens ist diese Abfrage ja eh in den bestehenden Skripten schon vorhanden, z.T. mit unterschiedlichen Methoden. Einfach da mal reinschauen.
Ja! Jedes Skript wird über die von uns verwendete UserChrome-Logik zweimal aufgerufen. Warum das im Detail so ist, kann ich jetzt auch nicht sagen
Ist doch ganz einfach: Doppelt hält besser! 🤣
Danke dir, Sören Hentzschel und 2002Andreas für die Antworten. War mal wieder ein lehrreicher Abend. 🙏
Habe ich eigentlich überall in der Art in Scripts.
Verstehe immer noch nicht, warum ein Button im Anpassen Fenster fast immer eine Fehlermeldung aufwirft.
Das hier ist auf Mac, und zugegebenermassen 115esr, war aber schon ewig das gleiche Problem.
Die utilities.js ist Teil der Scriptvorbereitung Dateien.
Hier ein Beispielscript, und die relevanten Errors in der Konsole:
// reader button.uc.js
// error test
(function() {
//if (location.href !== 'chrome://browser/content/browser.xhtml')
//return;
if (!window.gBrowser){
return;
}
try {
CustomizableUI.createWidget({
id: 'reader_button',
type: 'custom',
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
var currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
let buttonicon = "Letters_R_1px.png";
let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
let props = {
id: 'reader_button',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
label: 'Reader Toggle',
tooltiptext: 'Reader Mode',
//style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) + '");',
style: 'list-style-image: url("chrome://browser/skin/reader-mode.svg");',
};
for (var p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
} catch(e) { }
// if(!document.getElementById("reader_button"))
// return;
document.getElementById("reader_button").addEventListener('click', event => {
if (event.button === 0) {
AboutReaderParent.buttonClick(event);
}
});
})();
Alles anzeigen