Hallo!
ZitatgBrowser.previousTab(gBrowser.mCurrentTab);
Bist du sicher, daß der Code ganz genau so lautet?
Das funktioniert nämlich bei mir auch in keyconfig nicht.
Es kommt diese Fehlermeldung: gBrowser.previousTab is not a function
Hallo!
ZitatgBrowser.previousTab(gBrowser.mCurrentTab);
Bist du sicher, daß der Code ganz genau so lautet?
Das funktioniert nämlich bei mir auch in keyconfig nicht.
Es kommt diese Fehlermeldung: gBrowser.previousTab is not a function
Das sieht schon sehr gut aus. :klasse:
Dann versuche ich mal, alle Fragen zu beantworten: ![]()
Zitat von begeAlso nicht jedes Script ändern, um den Platz für die Anzeige zu definieren, sondern im CTR-Appmenu-Script?
Ja, so habe ich das auch gedacht.
Zitat
Das betrifft besonders Einträge, die von Add-ons kommen. Lassen die sich auch verschieben?
Ja.
Zitatdas Datei- und das Extras-Menü
...
Aber es bleibt das Problem, dass ich diese Einträge nicht mit insertBefore positionieren kann.
Das funktioniert so wie sonst auch, z.B.:
pane1.insertBefore(fileMenu, document.getElementById('appmenu_savePage'));
Man braucht nur das Element davor oder danach zu kennen.
https://developer.mozilla.org/en-US/docs/Web…de.insertBefore
Das Attribut 'label' ist im Datei- und Extras-Menü bereits mit den richtigen Werten vorhanden.
Man braucht es also nicht zu setzen, es stört aber auch nicht.
ZitatUnd wie kriege ich den menuseparator am Anfang einer Spalte weg, wenn ich die darüberliegenden Einträge mit CSS ausgeblendet habe?
Wenn man den Eintrag davor kennt, sagen wir, er hat die id id, dann mit CSS so:
#id + menuseparator {display: none}
Mit JavaScript entfernt man Elemente mit Node.removeChild.
Zitat[...] ich möchte es am Anfang der zweiten Spalte haben.
Als Beispiel mit dem Extras-Menü:
pane2.insertBefore(toolsMenu, pane2.firstChild);
Alle Elemente müssen vorhanden sein, bevor auf sie zugegriffen wird.
Bei den standardmäßig vorhandenen und von Erweiterungen mitgebrachten ist das ohnehin der Fall.
Bei von anderen Skripten erzeugten nicht unbedingt; darum sollen alle Anweisungen, die diese Elemente betreffen, in die setTimeout-Funktion geschrieben werden.
Sind mehrere Fx-Fenster geöffnet, so existiert das UserCSSLoader-Menü nur im ersten Fenster (siehe auch http://www.camp-firefox.de/forum/viewtopi…=835608#p835608).
Darum die Abfrage, ob es existiert, damit das Skript nicht mit einer Fehlermeldung an dieser Stelle abbricht:
if (UCLmenu) ...
Nebenbei:
Mit CSS kann man nicht nur ausblenden, sondern oft auch die Reihenfolge ändern.
https://developer.mozilla.org/en-US/docs/Web…x-ordinal-group
Schließlich noch ein Skript mit den genannten Änderungen:
(function () {
if (location != 'chrome://browser/content/browser.xul') return;
var pane1 = document.getElementById('appmenuPrimaryPane');
var pane2 = document.getElementById('appmenuSecondaryPane');
var spacer = document.createElement('spacer');
spacer.setAttribute('flex', '1');
pane2.appendChild(spacer);
var hboxPane1 = document.createElement('hbox');
var hboxPane2 = document.createElement('hbox');
pane1.insertBefore(hboxPane1, document.getElementById('ctraddon_appmenubox_developer').nextSibling);
pane2.appendChild(hboxPane2);
var fileMenu = document.getElementById('file-menu');
pane1.insertBefore(fileMenu, document.getElementById('appmenu_savePage'));
var toolsMenu = document.getElementById('tools-menu');
pane2.insertBefore(toolsMenu, pane2.firstChild);
var menuButtonsPane1 = ['UserScriptLoader-icon'];
var menuButtonsPane2 = ['print-button','test-button'];
setTimeout(function() {
var UCLmenu = document.getElementById('usercssloader-menu');
if (UCLmenu)
pane1.insertBefore(UCLmenu, document.getElementById('ctraddon_appmenubox_developer').nextSibling);
for (var id of menuButtonsPane1) {
var button = document.getElementById(id);
if (!button) {
window.CustomizableUI.addWidgetToArea(id,'nav-bar');
button = document.getElementById(id);
};
hboxPane1.appendChild(button);
};
for (var id of menuButtonsPane2) {
var button = document.getElementById(id);
if (!button) {
window.CustomizableUI.addWidgetToArea(id,'nav-bar');
button = document.getElementById(id);
};
hboxPane2.appendChild(button);
};
}, 0);
}) ();
Alles anzeigen
Der CTR bringt ja auch ein Menü mit.
Das kann man mit Skript-Hilfe auch fast beliebig gestalten, wenn auch nicht so bequem wie bei PM.
Falls du testen magst:
Installiere in einem neuen Profil den CTR, userChromeJS, das Testskript aus Beitrag 58 und das folgende Skript.
Damit kommen im Menü ein Eintrag für Neustart und zwei Buttons hinzu.
// CTR-Firefox-Menü anpassen 1
(function () {
if (location != 'chrome://browser/content/browser.xul') return;
var menuitem = document.createElement('menuitem');
menuitem.id = 'appmenu_restart';
menuitem.setAttribute('label', 'Neu starten');
menuitem.setAttribute('oncommand', 'Application.restart()');
var refitem = document.getElementById('sync-setup-appmenu');
refitem.parentElement.insertBefore(menuitem, refitem.nextSibling);
var pane2 = document.getElementById('appmenuSecondaryPane');
var spacer = document.createElement('spacer');
spacer.setAttribute('flex', '1');
pane2.appendChild(spacer);
var hbox = document.createElement('hbox');
pane2.appendChild(hbox);
var menuButtons = ['print-button','test-button'];
setTimeout(function() {
for (var id of menuButtons) {
var button = document.getElementById(id);
if (!button) {
window.CustomizableUI.addWidgetToArea(id,'nav-bar');
button = document.getElementById(id);
};
hbox.appendChild(button);
};
}, 0);
}) ();
Alles anzeigen
Zitat von Mithrandir[...] muss zunächst der firefox-eigene Button per Anpassen in irgendeine Leiste gezogen werden. Danach den Firefox neu starten und der Button landet (neu gestylt) in der urlbar.
Zitat von Mithrandir
Sicherheitshalber (irgendwann haben wir das ja wieder alle vergessen) habe ich das jetzt in der Readme unter Move Feedbutton To Urlbar (Klick mich) eingetragen.
Fügt man nach Zeile 11:
Zitatvar feedButton = document.getElementById('feed-button');
noch folgendes ein:
if (!feedButton) {
window.CustomizableUI.addWidgetToArea('feed-button','nav-bar');
feedButton = document.getElementById('feed-button');
};
dann wird das Ziehen in eine Leiste im Skript erledigt und Neustart ist überflüssig.
Zitat von begeJetzt kommts: Testbutton in PM verschoben - Neustart - Testbutton weg. Anpassen-Dialog geöffnet, geschlossen - Testbutton im PM wieder da.
Genau das habe ich auch beobachtet:
Der Testbutton und auch von Haus aus vorhandene Buttons bleiben nicht immer in PM-Menü.
Nach Neustart, in neuen zusätzlichen Fenstern und nach Öffnen und Schließen der Anpassen-Seite sind manchmal weniger Buttons da, manche kommen wieder, andere gehen, kommen vielleicht auch wieder oder auch nicht usw.
Wie Merci chao sagte: "Toolbar-box is for fun only." :lol:
Denk daran, deine Antwort an ihn zu löschen / ändern / ergänzen. ![]()
Zitat von begeDas Problem, dass der Button mit Personal Menu nach einem Neustart aus der Toolbar verschwindet, ist allerdings geblieben.
Bei mir bleibt er.
Nimm ein neues Profil mit Personal Menu und userChromeJS und diesem Skript. Keine weiteren Erweiterungen und Skripte.
Teste: Bleibt der Button nach Neustart in der Leiste?
Hm, noch wenig, das ist neu für mich.
Die Skripte 399 und 401 der Skriptliste sind so gebaut.
Ich habe sie mir als Vorlage genommen und ein Testskript nachgebaut:
// Test-Button 1
(function () {
if (location != 'chrome://browser/content/browser.xul') return;
CustomizableUI.createWidget({
id: 'test-button',
type: 'custom',
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
var props = {
id: "test-button",
class: "toolbarbutton-1 chromeclass-toolbar-additional",
label: "Test",
removable: "true",
tooltiptext: "Test",
style: "list-style-image: url(data:image/gif;base64,R0lGODlhEgASALMPAP//95v/GAIlCAQWBAQ1DMb/a97/rWveEFLWEJz/GAhrGAiUISG1If///wAAAP///yH5BAEAAA8ALAAAAAASABIAAAR18Mnpqp2YupN6KVUmOQzCJYWhGk5GlmcKzCy1MLBnzFb7WDnUztEotojGTUCILDYqTuMy0XRCjc8TslkhCASDAcJEjSYVizRufDhULQr0DVca90KOeHpO7/vyemp9dD4/cQoVe4qFI4eIDosiP4COIZIjdyIRADs=)",
oncommand: "alert('hi! :)')"
};
for (var p in props) {
toolbaritem.setAttribute(p, props[p]);
};
return toolbaritem;
}
});
}) ();
Alles anzeigen
![]()
Zitat von loshombreAber erst mal schauen wir mal, wo es eventuell noch klemmen könnte, wenn schon 2 Hombres irgend welche Faxen damit melden.
Nochmal getestet:
Neues Profil nur mit dem Button, keine weiteren Skripte und Erweiterungen: es funktioniert einwandfrei.
Ins Profil noch zusätzlich Classic Theme Restorer installiert: es funktioniert ebenfalls einwandfrei.
Endor und ich hatten ursprünglich vor, den Button frei positionierbar zu machen.
Damals, vor ca. 2 1/2 Monaten, wusste ich keinen Code mit dem das ab Fx 29 machbar ist.
Mittlerweise haben wir einen.
Ausführlich haben wir das hier diskutiert: http://www.camp-firefox.de/forum/viewtopic.php?f=16&t=107608
Wenn wir schon ein neues Skript in die Liste nehmen, dann, meine ich, nehmen wir doch eines für einen frei positionierbaren Button.
Ich habe das damalige entsprechend geändert.
Wie das ursprüngliche Skript fügt es auch einen Eintrag im Extras-Menü hinzu und belegt auch F9 mit der Cache-Leeren-Funktion.
Es funktioniert auch mit dem Classic Theme Restorer.
Der Name kann z.B. Clear Cache Button_Movable o.ä. sein.
Gern geschehen! ![]()
Zitat von begeKannst du mir in Kürze erklären, warum das USL-Script den Button im PM nicht aktualisieren kann und ein zweites Script dafür nötig ist?
Leider nein, ich weiß es auch nicht.
Der Tooltip wird übrigens ebenfalls nicht aktualisiert.
Wenn wir schon ein Zusatzskript haben, dann bauen wir das doch auch ein:
(function () {
if (location != 'chrome://browser/content/browser.xul') return;
var PMmenu = document.getElementById('appmenu-popup');
var USLicon;
PMmenu.addEventListener('popupshown', function() {
USLicon = document.getElementById('UserScriptLoader-icon');
if (USLicon)
USLicon.addEventListener('click', updateState);
});
PMmenu.addEventListener('popuphidden', function() {
if (USLicon)
USLicon.removeEventListener('click', updateState);
});
function updateState(event) {
if (event.button != 0) return;
if (Services.prefs.getBoolPref('UserScriptLoader.disabled')) {
USLicon.setAttribute('state','disable');
USLicon.setAttribute('tooltiptext', 'inaktiv: Linksclick aktiviert, Rechtsclick Menü');
}
else {
USLicon.setAttribute('state','enable');
USLicon.setAttribute('tooltiptext', 'aktiv: Linksclick deaktiviert, Rechtsclick Menü');
};
};
}) ();
Alles anzeigen
Danke für die ausführliche Beschreibung. ![]()
Für die verschiebbaren Buttons in den Leisten habe ich zur Zeit keine Lösung.
Andere Möglichkeiten sind:
- Einen Button nicht verschiebbar zu machen, sondern mit einer fixen Position versehen.
Der bleibt auch nach Neustart auf seinem Platz.
- Einen verschiebbaren Button mit Custom Buttons erstellen.
Wie PM diese Buttons behandelt, habe ich nicht getestet.
Für das richtige Symbol des USL-Buttons im PM-Menü habe ich folgendes Skript, das zusätzlich zum USL-Skript installiert werden muss:
(function () {
if (location != 'chrome://browser/content/browser.xul') return;
var PMmenu = document.getElementById('appmenu-popup');
var USLicon;
PMmenu.addEventListener('popupshown', function() {
USLicon = document.getElementById('UserScriptLoader-icon');
if (USLicon)
USLicon.addEventListener('click', updateState);
});
PMmenu.addEventListener('popuphidden', function() {
if (USLicon)
USLicon.removeEventListener('click', updateState);
});
function updateState(event) {
if (event.button != 0) return;
if (Services.prefs.getBoolPref('UserScriptLoader.disabled'))
USLicon.setAttribute('state','disable')
else
USLicon.setAttribute('state','enable');
};
}) ();
Alles anzeigen
Um den Fehler einzugrenzen, teste bitte zunächst folgendes:
Nimm nochmal ein neues Profil mit der Erweiterung userChromeJS und dem USL mit der Änderung von Beitrag 42. Keine weiteren Eweiterungen und Skripte.
Bleibt der USL-Button nach Neustart?
Zitat von begeWenn die Buttons ein mal von Toolleisten und Anpassen-Dialog verschwunden sind, kriege ich sie nicht wieder zurück. [...] Hast du eine Idee, wie ich die Buttons in meinem Standardprofil wieder zurück kriege?
Versuche es mit "Standard wiederherstellen" im Anpassen-Fenster.
Ich habe mir zum Testen Personal Menu installiert. Bei mir sind keine Buttons im Menü. Wie bekomme ich die hinein?
"Die Chronik löschen, wenn Firefox geschlossen wird" ist angehakt. Falls in den Einstellungen dazu "Besuchte Seiten & Download-Chronik" angehakt ist, versuche es ohne Haken hier.
Dürfte nicht sein, denn genau deswegen haben wir den neuen Code: http://www.camp-firefox.de/forum/viewtopi…=907713#p907713
Er funktioniert auch mit dem CTR.
Darum meine Frage nach eventuellen sonstigen Erweiterungen.
Zeige bitte einen Screenshot des gesamten Fx-Fensters.
Hast du außer dem Classical Theme Restorer noch andere Erweiterungen, die an Leisten und deren Elementen etwas verändern?
Zitat von begeDer Entwickler schrieb, dass die Button Toolbar ein "Spielzeug" sei, er also keine großen Ambitionen hat, dort alles zu ermöglichen.
Hast du einen Link dazu?
Nebenbei, noch eine Bitte:
Das Zitieren soll das Verstehen, worauf man sich bezieht, erleichtern.
Ein Zitat des gesamten vorherigen Beitrags bringt diesbezüglich nichts und erschwert etwas das Lesen.
Teste bitte:
Die Zeilen 559 - 564 sind ersetzt durch:
USL.icon = document.createElement('toolbarbutton');
USL.icon.id = 'UserScriptLoader-icon';
USL.icon.className = 'toolbarbutton-1 chromeclass-toolbar-additional';
USL.icon.setAttribute('context', 'UserScriptLoader-popup');
USL.icon.setAttribute('onclick', 'USL.iconClick(event)');
USL.icon.style.padding = '0px 2px';
document.getElementById('navigator-toolbox').palette.appendChild(USL.icon);
var toolbars = Array.slice(document.querySelectorAll('toolbar'));
for (var i=0; i<toolbars.length; i++) {
var currentset = toolbars[i].getAttribute('currentset');
if (currentset.split(',').indexOf(USL.icon.id) >= 0) {
var j;
if (i == 0) j = 1
else j = 0;
toolbars[j].currentSet += ',' + USL.icon.id;
toolbars[i].currentSet = currentset;
};
};
Alles anzeigen