Vielleicht reicht das schon aus; ungetestet! Zeile 19 ersetzen mit:
Habe ich doch oben in meiner Version angegeben und auch in der anderen Version (mit der Konfiguration) war dieser Code drinnen.
Vielleicht reicht das schon aus; ungetestet! Zeile 19 ersetzen mit:
Habe ich doch oben in meiner Version angegeben und auch in der anderen Version (mit der Konfiguration) war dieser Code drinnen.
Debian sollte doch aber auch eine normale Release-Version anbieten, nicht nur eine ESR-Version.
Das müsste das Original sein:
Hallo Endor,
dieses Skript müsste für Mira_Belle erledigt sein, sie hat ja das fertige Skript gefunden:
Das ist aber eine andere Version, ohne Konfiguration am Anfang.
Mit aktualisiertem Eventhandler-Code funktioniert diese Version in about:preferences.
//Author @aborix - Tab schließen + Kontextmenü auch in dem Einstellungsfenster
//Erklärung von Sören https://www.camp-firefox.de/forum/thema/112673-userchrome-js-scripte-f%C3%BCr-den-fuchs-diskussion/?postID=1247653#post1247653
//angepasst von @milupo Zeile 22 > 8.10.2024 ab Fx 132 > tabbrowser-tabbox statt appcontent
(function() {
if (!window.gBrowser)
return;
var contextMenu = document.getElementById('contentAreaContextMenu');
var menuseparator = document.createXULElement('menuseparator');
menuseparator.id = 'context-sep-closetab';
contextMenu.append(menuseparator);
var menuitem = document.createXULElement('menuitem');
menuitem.id = 'context-closetab';
menuitem.setAttribute('label', 'Tab schließen');
//menuitem.setAttribute('oncommand', 'gBrowser.removeCurrentTab();');
menuitem.addEventListener('click', () => {
BrowserCommands.closeTabOrWindow();
});
contextMenu.append(menuitem);
var appcontent = document.getElementById('tabbrowser-tabbox');
appcontent.addEventListener('contextmenu', event => {
setTimeout(() => {
if (gContextMenu && !gContextMenu.shouldDisplay) {
for (let string of 'back forward reload bookmarkpage'.split(' ')) {
document.getElementById('context-' + string).removeAttribute('hidden');
}
document.getElementById('context-stop').setAttribute('hidden', 'true');
const A = 'navigation sep-navigation savepage sep-paste selectall sep-viewsource viewsource viewinfo sep-bidi inspect-a11y inspect sep-closetab closetab'.split(' ');
for (let node of contextMenu.childNodes) {
if (A.includes(node.id.substring(8)))
node.removeAttribute('hidden');
else
node.setAttribute('hidden', 'true');
}
contextMenu.openPopupAtScreen(event.screenX, event.screenY, true, event);
}
}, 50);
});
})();
Alles anzeigen
Oh man, ich sollte mal eine Pause machen!
In #109 steht doch die Lösung!!
Nicht, dass du dich da wunderst: onpopupshowing ist in dem Skript kein Inline-Eventhandler, der hätte ersetzt werden müssen. Da hätte sich der Autor des Skriptes eigentlich an die Standardschreibweise halten müssen: onPopupshowing, hat er aber nicht, so sieht es wie ein Inline-Eventhandler aus, obwohl es keiner ist.
2002Andreas Kannst du mal das Skript ohne Änderung einstellen? Möglicherweise wurde beim Ändern ein Fehler eingebaut. Auf jeden Fall kann ich das bestätigen. Der Witz dabei ist, ich habe hier eine andere Version, da funktioniert es nun wieder nur in about:preferences. Allerdings ist mir das wurscht. Denn der Eintrag „Tab schließen“ als Eintrag im Kontextmenü eines Tabs ist schon seit langem Standard.
einfach nur den Fehler doch "oncommand" zu benutzen?
Nein, so einfach geht es eben nicht. Du musst addEventListener verwenden, nicht setAttribute. Die Parameter command und function (event) gehören zu addEventListener. Davor steht das Objekt (hier item), in den Skripten ist das meist eine Variable, die vorher mit var oder let definiert wird.
Mit setAttribute wurde vorher oncommand als Attribut definiert (setAttribute = setze Attribut soundso). Da es keine Inline-Eventhandler mehr gibt, geht es nicht mehr diese als Attribut zu definieren.
Also sieht es so aus: objekt.addEventListener('command', function (event) { … }); Zwischen den geschweiften Klammern steht der auszuführende Code, der leider auch oft umgebaut werden muss.
Wenn ich deinen Code einfüge, dann sind die Buttons trotzdem grau statt weiß.
Grau müssten deine Menüleiste, deine Tableiste und der aktive Tab sein. Die beiden Symbole, um die es hier geht, sollten bei dir weiß sein.
Wie bist Du denn auf
item.addEventListener ('command', function (event) {
if (event.button == 0) {
gExternalApplications.exec(this.path, this.args);
} ,anstattitem.setAttribute('oncommand', function(event) {
gExternalApplications.exec(this.path, this.args);
}, true) gekommen?
Du könntest schwere Fragen stellen.
Was du bisher noch nicht so richtig verstanden hast: Es gibt keine Inline-Eventhandler mehr. Diese beginnen mit on- und danach den entsprechenden Befehl, also z. B. oncommand, onclick, ondblclick. Stattdessen kann jetzt nur noch die Methode addEventlistener verwendet werden, die den Eventhandler dem Skript sozusagen bekannt macht. Der Eventhandler ist dabei ohne vorgesetztes on, also nur command, click, dblclick. Die Methode addEventListener hat noch einen zweiten Parameter und das ist noch so ein Rätsel für mich. Wenn im auszuführenden Code event vorkommt, kann man offensichtlich event => verwenden. Aber dieser zweite Parameter kann auch eine Funktion sein. Und hier wird ja eine Funktion ausgeführt. Deswegen habe ich einfach function (event) genommen, in der Hoffnung, es funktioniert. Es hat funktioniert, Glück gehabt.
und diesen beiden Spielen
So lange wie sie auf einem neueren Windows noch laufen …
funktioniert leider nicht.
Firefox neu gestartet?
Somit funktionieren 15 Skripte dank eurer Hilfe wieder einwandfrei
Na, das ist doch was. Und Spider Solitär ist auch wieder erreichbar.
Funktioniert hat es trotzdem.
Ja, weil es nur das Menü betraf. Der Code für das Symbol war ja korrekt.
In Zeile 14 muss man bei type button in menu ändern. Dadurch hat man dann das Menü Start am Ende der Menüleiste. Aber: Bitte korrigiere im Skript am Ende tem.addEventListener in item.addEventlistener, sonst funktioniert der Aufruf per Menü nicht. Habe vergessen den Buchstaben „i“ zu kopieren. War ein blöder Kopierfehler.
da hat milupo ein i vergessen.
Genau.
Habe es im Code-Kasten oben geändert.
2002Andreas Diese Version scheint zu klappen:
// ==UserScript==
// @name Thunderbird.uc.js
// @namespace ithinc#mozine.cn
// @description External Applications
// @include main
// @compatibility Firefox 3.5.x
// @author ithinc
// @version 20091212.0.0.1 Initial release
// ==/UserScript==
/* :::: External Applications :::: */
var gExternalApplications = {
type: 'button', //'menu' or 'button'
insertafter: 'urlbar-container',
apps: [
{name: 'Thunderbird', path: 'C:\\Program Files\\Mozilla Thunderbird\\thunderbird.exe'},
],
init: function() {
for (var i=0; i<this.apps.length; i++) {
if (!this.apps[i].path) continue;
if (!this.apps[i].args) this.apps[i].args = [];
this.apps[i].path = this.apps[i].path.replace(/\//g, '\\');
var ffdir = Cc['@mozilla.org/file/directory_service;1'].getService(Ci.nsIProperties).get('CurProcD', Ci.nsIFile).path;
if (/^(\\)/.test(this.apps[i].path)) {
this.apps[i].path = ffdir.substr(0,2) + this.apps[i].path;
}
else if (/^(\.)/.test(this.apps[i].path)) {
this.apps[i].path = ffdir + '\\' + this.apps[i].path;
}
}
if (this.type == 'menu') {
var mainmenu = document.getElementById('main-menubar');
var menu = mainmenu.appendChild(document.createXULElement('menu'));
menu.setAttribute('label', 'Start');
menu.setAttribute('accesskey', 'a');
var menupopup = menu.appendChild(document.createXULElement('menupopup'));
for (var i=0; i<this.apps.length; i++) {
menupopup.appendChild(this.createMenuitem(this.apps[i]));
}
}
else {
var menubarItems = document.getElementById(this.insertafter);
var toolbaritem = menubarItems.parentNode.insertBefore(document.createXULElement('toolbaritem'), menubarItems.nextSibling);
toolbaritem.id = 'ExtAppButtons';
toolbaritem.setAttribute("class", "chromeclass-toolbar-additional");
toolbaritem.setAttribute("orient", "horizontal");
for (var i=0; i<this.apps.length; i++) {
toolbaritem.appendChild(this.createButton(this.apps[i]));
}
}
},
exec: function(path, args) {
for (var i=0; i<args.length; i++) {
args[i] = args[i].replace(/%u/g, gBrowser.currentURI.spec);
}
var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
file.initWithPath(path);
if (!file.exists()) {
throw 'File Not Found: ' + path;
}
if (!file.isExecutable() || args.length==0) {
file.launch();
}
else {
var process = Cc['@mozilla.org/process/util;1'].getService(Ci.nsIProcess);
process.init(file);
process.run(false, args, args.length);
}
},
createButton: function(app) {
if (app.name == 'separator')
return document.createXULElement('toolbarseparator');
var item = document.createXULElement('toolbarbutton');
item.setAttribute('class', 'toolbarbutton-1 chromeclass-toolbar-additional');
item.setAttribute('label', app.name);
item.setAttribute('image', 'moz-icon:file:///' + app.path + '?size=16');
// item.setAttribute('oncommand', 'gExternalApplications.exec(this.path, this.args);');
item.addEventListener ('command', function (event) {
if (event.button == 0) {
gExternalApplications.exec(this.path, this.args);
}
});
// item.setAttribute('tooltiptext', app.name);
item.path = app.path;
item.args = app.args;
return item;
},
createMenuitem: function(app) {
if (app.name == 'separator')
return document.createXULElement('menuseparator');
var item = document.createXULElement('menuitem');
item.setAttribute('class', 'menuitem-iconic');
item.setAttribute('label', app.name);
item.setAttribute('image', 'moz-icon:file:///' + app.path + '?size=16');
// item.setAttribute('oncommand', 'gExternalApplications.exec(this.path, this.args);');
item.addEventListener ('command', function (event) {
if (event.button == 0) {
gExternalApplications.exec(this.path, this.args);
}
});
item.path = app.path;
item.args = app.args;
return item;
}
};
gExternalApplications.init();
Alles anzeigen
Mal noch eine Frage. Wo taucht denn der Menüeintrag auf?
Mitleser Die Inline-Eventhandler sind ja schon lange nur eine Altlast nebenher, die Variante mit addEventListener und seinem Gegenstück removeEventListener gibt es ja schon seit einer Ewigkeit.
Keine Ahnung, was da im Argen liegt
In Zeile 55 ist noch der Inline-Eventhandler onpopupshowing, auf den in Zeile 36 wohl Bezug genommen wird.
BrokenHeart Im Skript aus Beitrag #91 ist in Zeile 55 noch ein schwerer Fall von ondblclick. Ansonsten funktioniert das Skript wohl offenbar. Das Symbol sehe ich nicht, ist wohl bei mir nicht vorhanden.
Ach, Mensch, grisu2099. Zu spät. Aber Firefox brauchte bei mir gerade eine Ewigkeit, um die Forumsseite nach einem Neustart wieder zu laden.
Funzt das?
Zeile 9 ist noch anzupassen. Wenn hier die Funktionen Nach oben und Nach unten im Kontextmenü erscheinen (unterstrichene Pfeilsymbole), so funktioniert mit dieser Version nur Nach unten.
Aber, was hat denn eine deaktivierte Hardwarebeschleunigung mit Werbe-Popup zu tun?
Wahrscheinlich nichts. Er hat aber geschrieben, dass er das Problem im Fehlerbehebungsmodus nicht hat. Angeblich sind die Add-ons nicht schuld. Bleiben CSS, Benutzerskripte und eben die Hardwarebeschleunigung. Es geht hier nur darum, herauszufinden, ob überhaupt eine von diesen vier Kategorien am Problem schuld ist.
Hier auf Windows würde Adwcleaner mein nächster Schritt sein. Mit welchem Programm man aber auf Linux nach Adware suchen kann, entzieht sich meiner Kenntnis.
Und von den Skriptnamen kann man auch nicht immer so wirklich gut auf die Funktion schließen.
Dem kann ich mich anschließen. Leider gibt es oft keine Kommentare am Anfang eines Skripts oder sie sind veraltet. Und ich bin leider auch oft zu faul, da etwas hineinzuschreiben. Allerdings kann das auch jeder für sich machen.
Ich habe hier sogar ein funktionierendes „Geisterskript“. Das Skript schließt rechte Tabs. Ich finde es nur nicht im chrome-Ordner.
Da würde ich vorschlagen ein Unterforum zu eröffnen, in dem nur die lauffähigen Scripte eingestellt werden, alles ohne Diskussion.
Was soll das bringen? Das hier ist sogar ein spezieller Thread für diesen speziellen Fall, dass die Eventhandler umgebaut werden müssen. Ein Unterforum ohne Diskussion? Ich fürchte, daraus wird nichts. (Fast) Jeder hat eine eigene Skriptversion und in dem Unterforum, was du willst, steht dann auch nur die eine Version, die dort eingestellt wurde. Die wirft sicher Fragen auf. Ihr kriegt offensichtlich kalte Füße, weil ich ein paar Skripts hintereinander eingestellt habe. Aber die sind nur kurz und im Prinzip sind da fast nur die gleichen Anpassungen für die Evenhandler (mit menuitem.addEventListener oder toolbaritem.addEventListener). Also habt euch nicht so.