Bitte helfen Sie, das Problem mit dem Skript auf FF 138.0.1 zu lösen. Partition Übergang funktioniert nicht, nicht öffnen Explorer.
Hier https://github.com/Endor8/userChr…35/saveto.uc.js findest du eine funktionierende Version.
Bitte helfen Sie, das Problem mit dem Skript auf FF 138.0.1 zu lösen. Partition Übergang funktioniert nicht, nicht öffnen Explorer.
Hier https://github.com/Endor8/userChr…35/saveto.uc.js findest du eine funktionierende Version.
Und nur mal 2 Beispiele:
Diese schon öfters erwähnte Thread ist gepackt voll mit super Infos zu der addEventListener Geschichte, aber immens aufgebläht durch die Einzelscript Diskussionen.
Hier haben wir wichtige Infos zu eval etc., die in einem Script spezifischen Thread versteckt sind.
Das sind für mich 2 typische Beispiele: Die Themen wurden erstellt, weil Skripte nach Firefox-Updates nicht mehr funktionierten. Das ist nach meiner Beobachtung die Regel. Im Verlauf der Diskussion wurden die nötigen Änderungen herausgefunden und in die Skripte integriert. Dass in dem Thema auch für die folgenden Firefox-Versionen grundsätzliche Informationen stehen, weiß man beim Erstellen des Themas noch nicht. Um solche Themen übersichtlich in einem Unterforum darzustellen, müsste also ein Moderator die Themen durchforsten und dann umbenennen und - oft nur zum Teil - verschieben. Und nach diversen Firefox-Updates ist manches schon wieder anders.
Die weniger aufwändige Möglichkeit, mit der Tendenz des Lebens zum Chaos umzugehen, ist wie bisher mit vertretbarem Zeitaufwand die Forensuche zu nutzen.
Inzwischen sind hier auch schon mehr als 10 Beiträge drin, die nichts mit dem Thema zu tun haben
Würdest du die einschließlich diesem hier bitte auch auslagern? Dann bleibt dieses Thema übersichtlich.
Diese Diskussion hatten wir schon mal um das Skript-Diskussionen-Sammelthema und es gibt weiterhin beides: Einzelne und Sammelthemen. Und ich hoffe, dass das so bleibt. Es gab schon in der anderen Diskussion unterschiedliche Auffassungen dazu.
Diese Skripte gehen jetzt auch wieder.
JavaScript: AnimationToggleButton.uc.jsHmm?!
Von welcher Version bist Du ausgegangen?(Edit: Ach, steht ja direkt im Kommentar.) Denn die bei Endor vor 4 Monaten hochgeladene Version funktioniert prima in Fx138.Nicht missverstehen: Es ist gut, dass du Du selbst eine Lösung gefunden hast.
Danke für den Link, hatte ich übersehen.
Diese Skripte gehen jetzt auch wieder
Ja, aber im Skript AnimationToggleButton.uc.js ist sehr viel toter bzw. überflüssiger Code. Die Schleife, um die Attribute zum 'button' hinzuzufügen, wurde um Abfragen ergänzt, die niemals true werden. Es gibt im aktuellen Skript die Objektvariablen für die inlineEvents überhaupt nicht mehr, also ist es sinnlos das abzufragen und dafür einen Eventlistener hinzuzufügen.
Einen Eventlister für oncontextmenu hinzuzufügen ist nicht notwendig, da in onClick() das Kontextmenü bereits durch die Befehle event.preventDefault() und event.stopPropagation() außer Kraft gesetzt wird.
Bei onclick ist es sowieso unsinnig, da der Eventlistener ja weiter unten im Code nochmal hinzugefügt wird.
Danke für die Korrekturen. Da ich nur Hobbybaster bin, habe ich versucht, es mit Kopien aus anderen Skripten wieder zum Laufen zu bringen. Die von dir angemerkten Punkte gehen über meine Kenntnisse. Natürlich hätte ich den Code daraufhin untersuchen können, welche Eventlistener tatsächlich gebraucht werden.
Ich habe mich jetzt für das Skript in Endors Sammlung entschieden, dann bin ich auf dem gleichen Stand wie das Forum hier.
Diese Skripte gehen jetzt auch wieder.
// 28_AnimationToggleButton.uc.js
// v. 0.4.2a
// 2025-05-03 bege Anpassung and Firefox 138
// https://www.camp-firefox.de/forum/thema/112673-userchrome-js-scripte-f%C3%BCr-den-fuchs-diskussion/?postID=1271136#post1271136
// 16.05.24 Endor Anpassung an Firefox 126+
// https://www.camp-firefox.de/forum/thema/137909
// 211104: BrokenHeart zuletzt in:
// https://www.camp-firefox.de/forum/thema/133649
(function() {
if (location != 'chrome://browser/content/browser.xhtml')
return;
try {
CustomizableUI.createWidget({
id: 'animation-button',
type: 'custom',
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
var button = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
var attributes = {
id: 'animation-button',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
removable: 'true',
label: 'Animation',
tooltiptext: 'Klick li: Gif ∞\nKlick mi: Gif 1x \nKlick re: Gif aus',
oncontextmenu: 'return false'
};
for (var a in attributes) {
//button.setAttribute(a, attributes[a]);
if(a === "oncommand") {
button.addEventListener('command', function(event) { Function(attributes[a])(); });
} else if(a === "onclick") {
button.addEventListener('click', function(event) { Function(attributes[a])(); });
} else if(a === "onmouseup") {
button.addEventListener('mouseup', function(event) { Function(attributes[a])(); });
} else if(a === "oncontextmenu") {
button.addEventListener('contextmenu', function(event) { Function(attributes[a])(); });
} else {
button.setAttribute(a, attributes[a]);
}
};
var animmode = Services.prefs.getCharPref('image.animation_mode');
button.setAttribute('anim', animmode);
button.IsOnce = (animmode == 'once');
function onClick() {
var button = document.getElementById('animation-button');
function setPref(value) {
Services.prefs.setCharPref('image.animation_mode', value);
};
function getPref() {
return Services.prefs.getCharPref('image.animation_mode');
};
function setIsOnce(value) {
var windows = Services.wm.getEnumerator('navigator:browser');
while (windows.hasMoreElements()) {
windows.getNext().document.getElementById('animation-button').IsOnce = value;
};
};
switch (event.button) {
case 0:
var animmode = getPref();
setPref('normal');
if (button.IsOnce) {
BrowserCommands.reloadSkipCache();
setIsOnce(false);
} else {
if (animmode == 'normal')
BrowserCommands.reloadSkipCache();
else
BrowserCommands.reload();
};
break;
case 1:
setPref('once');
BrowserCommands.reloadSkipCache();
setIsOnce(true);
break;
case 2:
setPref('none');
event.preventDefault();
event.stopPropagation();
BrowserCommands.reload();
break;
};
var windows = Services.wm.getEnumerator('navigator:browser');
while (windows.hasMoreElements()) {
windows.getNext().document.getElementById('animation-button').setAttribute('anim', getPref());
};
};
//button.setAttribute('onclick', '(' + onClick.toString() + ')();');
button.addEventListener('click', (event) => {
onClick();
});
return button;
}
});
} catch(e) { };
var css =
'#animation-button[anim="normal"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAoCAYAAAC4h3lxAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH4wkNFRE2JfCuMgAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAS6SURBVFjD7ZnNTxtHFMDfm7ENtbGxoV7b2A4gATZ2VEybCyAB5d4qUntLBZcI5dQ/oKcee4l6qBRFgTYqaUqjSFS5tVUrIEJCjQqYDxmIAwUMCV+GxMYfLDs7PQQQjhcKxY03Up60WntmZ/b93pdmdhAAoK2tTQCA9yRJsgEAgoqEUvoCEWc7Ojoet7e3Z/Vjc3Ozh1J6GRE5qFdQluXxgYGBXzjPVFODiB8dKM8Z13JQFwchRAIEjojvNzU1TQHAcgYApZQAAGxXbFeEykKdnHOqJgB30v1H+Xj5b4go6XQ6dxbAwY+UMVWyq92laoudOI9XHg2lzs5OGg6HWX9//0sPwRsmc3Nz1xHxbltbW22GB5REz/TbzhfOP43bxiWOnMRKYhXLpuWGXbJryGdhQkQPANxsaWm5ciyARbRs+Cf8t3QJXeywLWIJWy3WyUnf5NWEJmHME8D2/t2AiJ8dG0LV4ep7R5U/9Mq2frU6Uv1zvsxvsVi+OkwIRJsigDVtjRRtFkWOm6RkoWTasGeI/0cdzlWnrVarCADssMwqPaRj2ZbPLM7ACliBdNaXl+2UhS+FL32t4Zp4rjyiCCBS0XSipWSgIhU1Z1I+WTbtGfPcNj01rdXP1d/IFYQiwGbhpjNpSTqPG/T8wvOaHe3OqZPYkXTM1vxV8yPKyAAAjCvGrcBcoCsXEEQ5SDkJe8KfSoVS0at9aWP63XB5+PKplU845r0j3h7CiXi03bRiWgvMB7oop4nzABwbBtGCqDP4QfCaa8v1sChaFOGE03hp/MKSZenDJE2aTjO5PWV/7B3zfo8yKuaLadm0Vo/1N4OVwWsSSoacAgAAxDQxa0gIfQLC2Se2p+xPvCPeH5DhicluipjW66CuO1gZvMqQGXISQucVW9K26B313iaM7J7m+eJI8dPAQqCLcpp8HQAn1nFb2vakdqy2m0jkTGW2eKn4WWAxcIsCTf1vAAgoX1y92ONOuEeV+oW0MO8d8d4hUmbCnhpisfhZ3d9131Kg6ZwDIKDsX/X3CLNCqGqk6r57xz2RoXxKWPKN+r6j0ulfriTmJXOkJlrzIKcACCj71/x3hFlhBgAAOcpVo1W9roRrEgBA2BWe1I7VdpE9speT5SajYk6q0IHyvjVfrzAjhDLaOcrVI9W9er8+4ph1PKJ7VIQ8yL8ByL51X69txjahCMeRuaZcg3ndM59Ubfwb/l7btG1SzTu0Yz3g2/Dds4WULa+qrxaK65eUY8oesgffhD2yIgDhhJ9346GGHIC3APlK4rQm/c5mzaYzbx+zDHH7uQCiumhV1BH9/G0IvaYQIgAgG7eMa85C54Taqo95xzx75G/WEl3DGItRSouMK8YVz4rnrlotzTlHURQXsks+5/dlWWZqDhPOOTLGfh8aGlrP8sDg4OBGY2PjjYKCglqNRmPknBOVKb+TTqcXh4eH15UXlK8c2TQ0NLj0ev2XL8fySDwe75YkSTV5YTabKwkh3wAAl2X5YRYAIkJra+uvhJDSfQuo6tBj/zhMBgBgjF0nCi4DrVb7BQCI+wOYmq4D5QHgkVar/SnLAwdeaG5udlNKPwaASs65ao5eCSExSZLGS0tLH/T19fF/AGeo9vFEBn4KAAAAAElFTkSuQmCC)} ' +
'#animation-button[anim="once"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAoCAYAAAC4h3lxAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH4wkNFQw22pzCLgAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAATOSURBVFjD7VlvTFtVFD/3vtcWWlpAUkrbDazQkWkilfhl+zAahARNZjIT9QMzkS8EPm+wADMxWdRhsk842cYgbsbExWRqBkMGCwrbPpBsisi/V9rCZsBoHGwPKO277x0/sJqxviKVah/Gk7y89+7Nve/8zvmdc++5jwAAVFRUFCPia4wxGyIS0JDwPC9SSr8tLS0daG1tjeknXq/XSyn9EAAoaFcIIn4RDAZPBoPBjQAB4J2o8owhRdSW5jxPkBBAAHjT5XL1AMDYhn5KaSYAwMGDa7o3XheeB9AWgqkpx/x771sXCCEyIr4YAyD6UPhM2GQyMc1xx+FYsQBYF6JUqq2t5Xw+nzw4OAigcd6rit/vP0UI+ay8vHzvBg+oyeqqMXT7tm1+YiJNIgRYScmq2eP5xWkwhPkUYuAIIcUAcKasrKw6riL375sjJ064/HN3+XC07Zu+9LCnxBw6csRfZDKFUgVi8dHdRAg5HJdC5zryA48rH5UfRvUrly4VBFJl/uzs7JN/5lZCbKoA5heeEkdGDCvxJvnyK+OyKKb/zYgn20pzVqs1AgBy9F0VwFqI3/QjOh0ooRCf8Io9Pu4Ya2t77nvG9OGkrRNqjQYD21Q5SQKalsYSsuTkpHO05bgtQilQjtszUVsrPMvzEcN2AVD13LuY4fFETPEGvfJyyGixbD2Ip6acPzY15zJK1783cF2vdHS4p5PhCVUAhCCpq7tXYMuV9U/2FRUyQ3X13YIEVtKJ5hZbhNKNTu0fMEidne5pxvSRpFMIACDX+iC9tTVQeOuW7eexnwwSAaJ4PCH9/v0Lu4zG1fStTC4IzvGmZluIEFClZN81g0Q592TN28Jenpf0SQUAAGCxiMaqKnFPVVXiE/tmHJONx3JDlMKm8dTba2AE3EJNja+Y4yRdUii0XfHN2H0NDXkipWRLmepqb1r4kwvuKVnWSSkH4A84phsa7EuUApfIuJ6etMiFi4mDSAgAIsHuHve0IOTdV+sPBOy+o0fzxGi2SVS6u9MiFz8tEmSZZ/8AAIJXr7qFri7zcstx+6zgsy1tVD4v0NBoX4wXsFuVK1fS127cKJhLKgBEgr29Rb7OrowVAABZJtjS4gzMzNgeAADMztpnGo85fkdMjDZxd8EhiknJQlHl+/oK/R3nzeLj7bIM2NTsCNTXZRhPf2wREVNTW/B/RZtr/YX+cx2WB2q9skyUj05nLgNAyk4yNrVaf3+h/+xZy0MtV2hxPdA/UORvP6NueS2Jqgfm5qxL7e2WpZ1QI9M43CawQ2THnUr85wCoBrHZLMFbh0MpA5efv0a3BcBqXcw8dGjxhf8p9C9RiAAA3rmTvrJrt21RY2e7MD1t+e2x15gamlcUJUgpfXpoWC8NDTsDGja2IknSTTUKNSqK8lDjTEFZlj+oq6ubjd2tIUJlZWUmY+wlnuddGoyLX8Ph8HfDw8OziAj19fW8IAg3AYBTFGWY4BO/ZPbt27fLaDS+CwCIiPdEUTzPGNNMZGRlZbkopW0AgIqiDMUAIISA1+vto5TmrNcDyGnJHYQQBABlfcsjn6KxBQyCTqdrBoDIowGylq6o8gAwotPpPo/xQNQLBw4c2M1x3KsA4NLSr1dK6UPG2GhOTs7Xly9fxj8A10cIqTl/HS8AAAAASUVORK5CYII=)} ' +
'#animation-button[anim="none"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAoCAYAAAC4h3lxAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH4wkNFRMXW6/c7gAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAATFSURBVFjD7ZlfTFtVHMd/55z+Adrbv7fg5E9L/4hLpg/GkABJwcb4plnilhg18OBC9rQnn3wyZosQJXswIwzQRRBxWcbcMnSaEf6EhMiDjj9hQssmVMV20FG4QHu59x4fRgnQWwTajUviL2nannPPvb/P7/f9/dLTgwAAfD5fLgC8LAhCHgAgUJARQqIIocmampqp6urqpHnk9XpLCCEnEUIUlGtIkqSRvr6+O5Rud1OFEHoz4TxPqRqosjjUGAsIgCKEXqmoqBgHgD+3ARBCMADAO9Goo/Thw1oKQJQEEGbZnvqCgp8RQoJGoylMAkh8eD4Ws2QLAlGadiyrq8VbpVRbW0v8fr/Y29sLAAAYjphNT083IIQ6fD7f8W0ZkLN1jebxDMv+EtDrZwml2M1xjsL5+TLV+rruMBsTQqgEAJoqKyvfSwmwkpPz6LLH0+xXq5c2B41Gf6nFMvZuIHBGG48zhwTweONdhxB6P6WEbtntV7c5v2HD2dn/DBYW3jis8JvN5rrNgkAoTxYgyjDBAZ0umOomHSbT/ZhWu3xAH9Lq0zabjQcAMfFdFoCXifxW0wKIcZVK2O/DQ2az/3ZJyUWJkOVMZUQWQL2+btgtUjwA0QiCaj8Pmjeb79c5nVe6GSb0o8fTmCkIWQATx+WXrq7mp1p0Ohp9IXsfRbxgNk9eKC7+NoaQCABwW6+P/OB2t9AMQMgXMaX41OzsqQJB0O+ceikeZ6uCwZN7jrzJ9OCC09kWw5jfOt7NMKE7bneLhPFKOgApZcBwXP6Hk5Nn/TbbwIROF9RQSl7kuCJXOPyamucNe7l5xGSaqnO5vl5DSLZebjFMiHg8Ta8HAmexKOoyCgAAoF1bs52YnX37xEGatdEY+NTp/GYlhfMJu8EwYepytb4RCJxBkqTLjITStAWjcabe5brCYRzfy/XfGwx/33W7WyjGq88CYNc+vmg0Bj53uVqjGO+rzXYZDHM9Hk8zxXjtaQJIvzkcbSGW/VXWeYPhQb3T2b64o2D3atcZZq7H5fqSYhx7GgDSPYejrZllJ87b7ddCVuvoNs0bDLOfud1fLRISS0d+143G4FR+/s1MA0gjDkf7ZZb9HQBAQEg673B0hq3WMQCAJYMh0OB2t0QwXs9EDcUJ4TPShTadt9s7m1h2YuuggJD0icPReS4rK9iemzu8cEDZpGv/BSCN2e2dTTbbqNykiJB48dix/sPc4OwmITput3c22mxjSt6hpczAeFHR1UspIq8kk81AxGwev5Sbe+8o7JFlAaQn/xPRIwtwlOzIA8gWcRbPZ38QieQfllN5KyvPpQWg5zj3qxx37n8JPSMJYQCQJvX6kNliGVVa95ljmMmtv2CSAERRXCKE6Lt1ur+6nc4OpUaaUop4nv8jSUKU0muSJIlKlgmlFImieHdwcDCclIH+/v5H5eXljVqt9rhKpWIopVhhznOxWGxmaGgoLDePdh7ZlJWVFeTk5Hz8ZC0NLi8vtwqCoJi6MJlMxRjjLwCASpI0kASAEIKqqqqfMMbWjQgo6tBj4zhMAgAQRbEBy6QM1Gr1RwDAbywQlfRKOA8Aw2q1+rukDCSy4PV6CwkhbwFAMaVUMUevGOMlQRBGrFbrza6uLvovNfXp2AJLOUkAAAAASUVORK5CYII=)}';
var stylesheet = document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"');
document.insertBefore(stylesheet, document.documentElement);
})();
Alles anzeigen
force-contextmenu.uc.js (Kontextmenü durch Seite ändern lassen oder nicht)
(function() {
if (location != 'chrome://browser/content/browser.xhtml')
return;
try {
CustomizableUI.createWidget({
id: 'contextmenu-button',
type: 'custom',
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
var button = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
var attributes = {
id: 'contextmenu-button',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
removable: 'true',
label: 'Rechtsklick Kontextmenu',
tooltiptext: Services.prefs.getBoolPref('dom.event.contextmenu.enabled') ?
'Kontextmenu kann manipuliert werden' : 'Kontextmenu kann nicht manipuliert werden',
oncommand: '(' + onCommand.toString() + ')()'
};
for (var a in attributes) {
//button.setAttribute(a, attributes[a]);
if(a === "oncommand") {
button.addEventListener('command', function(event) { Function(attributes[a])(); });
} else if(a === "onclick") {
button.addEventListener('click', function(event) { Function(attributes[a])(); });
} else if(a === "onmouseup") {
button.addEventListener('mouseup', function(event) { Function(attributes[a])(); });
} else if(a === "oncontextmenu") {
button.addEventListener('contextmenu', function(event) { Function(attributes[a])(); });
} else {
button.setAttribute(a, attributes[a]);
}
};
function onCommand() {
var isEnabled = !Services.prefs.getBoolPref('dom.event.contextmenu.enabled');
Services.prefs.setBoolPref('dom.event.contextmenu.enabled', isEnabled);
var windows = Services.wm.getEnumerator('navigator:browser');
while (windows.hasMoreElements()) {
let button = windows.getNext().document.getElementById('contextmenu-button');
if (isEnabled)
button.setAttribute('tooltiptext', 'Kontextmenu kann manipuliert werden')
else
button.setAttribute('tooltiptext', 'Kontextmenu kann nicht manipuliert werden');
};
};
return button;
}
});
} catch(e) { };
var css =
'#contextmenu-button[tooltiptext="Kontextmenu kann manipuliert werden"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAkhJREFUeNqUU0toU0EUPfN5n0RTI1ip6EoJpQtRBCu4qVQouFIJoVap4EKtuOsiuCriRgSxG63iRqRqBY1UXYggiliU6q4rP7hooBJJE4nUxr68N+Od13ylFbxw38zcmXvuuZ/Htl98/qPsBfGK0tBao1kYAwR9LMHzjuQbJeehrVmkcf4ycgD/kqmv8+2D4+/vxVx51PoLRJrIRp58yoFVoxoiivYHOzvgDmfw+0oSt47tHjhx9wNrc+WAFBw1DF6j7UqBqEUqZbhGJA/tJoVyoLAv0Y7xwe4jS7562JyqrG1ccuD02CCba1VldmrvVmxIT8Kn89JoEl6gkhFyU4y3AjiGVhXAiOIa2VIZo8mdodYkINwKt6BsBwETDQBbiDD/GoCJX1j0ME8aWulyV0cMFWHjlxvDxFgPPOm0psBW7AFZqS6MIhpZXLOenHvx043DFxZ4IwVGLFi41pVAXddCpM1B7lIaDzZbuH29FyUR0WWIsYDqUGcQdeRyG5uDc6qJa+Pz+XOwXk0idfY0UXWpEArTb96dyc19Z3WAt7NF87510rgA1q6Dd/MyUsdTQKkAXfTBKKU9OzrxaHZuSLJGsLDnrQB0MJNHiv2HgL7+BsOXGejHLyBZ1SPsPX2ZbkIw46gVOWmo+9egJq7SfCgiJsAtG4xWKfmyw+GuTav+C9n0CKbv3EB31xZYNLG+9jH1MY+iQkZalYXXiQvPesykaegVW+hH+9Cf+IbCzFN43A5TK1aCzMmZ7LAJv400jv+XvCH3R4ABADkKvfJiBGzqAAAAAElFTkSuQmCC)} ' +
'#contextmenu-button[tooltiptext="Kontextmenu kann nicht manipuliert werden"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYlJREFUeNpi/P//P4Nex67333/9Ffj97z8DiI8MGBkZGJiBBCsz0+ubtZ5iMHG4OhBDpXHbf0Lg8J3X/xXqty5DNgCEWUAckM0gsOnmCwZGqK0gC/4B2f7qEgwcRWsZfvQFM8yPNo1MZNjK+KDROxJmEAuyczhYmIHOBRoAhEDzGf5CxUFe+P73H4ODqijD4liziBSW7axA4RC4ATDAwcLEwMTICHYFSOs/qMvSrJQYRMo2MPwB8n/2BzP8/vsvGMUFMMDOzAR0PsQAEPjH9J/h0cfvDP3BBmAMA3+QAhrFADZmZrD/YQaAlL399ovhzddfcDVGUvwQCWwGgLzAyIAJ/jNAAhUbQPMCRDsuQwgawMXOAolGXK4gZMCxh++AsQBJBxgGgNIFEAdpSWIaAFPPBE22WA1AIhkxDIDqAMc9kGT8z4jFgP9wLzAi2QA2gIUJIhCoKclADICphxvA+vvLQdWm7faglPYfZ3hDkjhIM0g9XAyUD4BOUgayBRiIBx+A+u6CGAABBgBmFq9IdRyTmAAAAABJRU5ErkJggg==)} ';
var stylesheet = document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"');
document.insertBefore(stylesheet, document.documentElement);
})();
Alles anzeigen
media.mediasource.uc.js
(function() {
var browser_chrome = 'chrome://browser/content/browser.xhtml';
if (location != browser_chrome)
return;
try {
CustomizableUI.createWidget({
id: 'mediasource-enabled-button',
type: 'custom',
defaultArea: CustomizableUI.AREA_NAVBAR,
onBuild: function(aDocument) {
var button = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
var attributes = {
id: 'mediasource-enabled-button',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
removable: 'true',
label: 'media.mediasource',
tooltiptext: Services.prefs.getBoolPref('media.mediasource.enabled') ?
'media.mediasource ist aktiviert' : 'media.mediasource ist deaktiviert',
oncommand: '(' + onCommand.toString() + ')()'
};
for (var a in attributes) {
//button.setAttribute(a, attributes[a]);
if(a === "oncommand") {
button.addEventListener('command', function(event) { Function(attributes[a])(); });
} else if(a === "onclick") {
button.addEventListener('click', function(event) { Function(attributes[a])(); });
} else if(a === "onmouseup") {
button.addEventListener('mouseup', function(event) { Function(attributes[a])(); });
} else if(a === "oncontextmenu") {
button.addEventListener('contextmenu', function(event) { Function(attributes[a])(); });
} else {
button.setAttribute(a, attributes[a]);
}
};
function onCommand() {
var isEnabled = !Services.prefs.getBoolPref('media.mediasource.enabled');
Services.prefs.setBoolPref('media.mediasource.enabled', isEnabled);
event.target.ownerGlobal.BrowserCommands.reload();
var windows = Services.wm.getEnumerator('navigator:browser');
while (windows.hasMoreElements()) {
let button = windows.getNext().document.getElementById('mediasource-enabled-button');
if (isEnabled)
button.setAttribute('tooltiptext', 'media.mediasource ist aktiviert')
else
button.setAttribute('tooltiptext', 'media.mediasource ist deaktiviert');
};
};
return button;
}
});
} catch(e) { };
var css =
'#mediasource-enabled-button[tooltiptext="media.mediasource ist aktiviert"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIGSURBVDhPY2RAA4KCgkp2dnbl8vLydgICAkogsQ8fPtx7+PDhISDofP/+/T2wQihAMcDX13eunq5u0ssfvxm2x3RDRSHAc0kpgzgHK8Oly5fnbd68ORkqjDAgKSnpAisPr/6WhIlQEezAZ0E+w+8vny/OmzfPAMRnBhEeHh5z+UTEPLclTwZx8YJbBicZVC5aSYiLCMvduXNnExMfH5+SqopK0o7UqVAlhMFOoFqQHpBeJiMjo/Ln335CpRAgZns7Q/iSIigPE4D0gPQyiYmJ2R3PmQ0VRoAP7z8wvHjxgsGwJRgqggpAekB6mTg5OcFRhQ6A0cXw7t07hq/v3zHoV3syOPTHQWUQAKSX6e/fv1AuKjh48CADMN4ZLl26BHbJj58/oDIIANLL9OnTJ5SEAQPARMQgLS3NwCcqxvBy7nmGExWroDIIANLLBDT9kHZbOFQIAcTERBlk5OUZfi27DhVBBSA9IL1M165d6xRg/AcVRoB7LVsYbnXtgfIwAUgPSC/Tly9f7j14+HCeToM/VIowAKkF6QHphSdlNze3CwzsHPpXGzdBRbAD7Xo/BoafPy7u2rULnJRRMpOJiclceTm5pHfAiLlVvw4qCgFqjUEMQsCE//DRo3lnzpzBzEwwwM3NraShoVEuLCxsB2KDxL5+/Xrv7du3h27cuNEJYoMVggEDAwAplchp9LL2uwAAAABJRU5ErkJggg==)} ' +
'#mediasource-enabled-button[tooltiptext="media.mediasource ist deaktiviert"] {list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH4QgVChcoe9onUQAAAvBJREFUOMttk09M22UYxz+/931b+kcg1FEoZAmWbGOSuCVOjR6IXnfzQGnCDeLBG4lpCJBAIAEye+CqB6qXJrTcPGjMolnINCbOxDl1soQyFKms0lrH1tHf731fD7SdLj7Jk/fwPt+83+/nzePQqIWFBRYXF1leXo5ba6ettSPW2jiA4zgFx3G2HMe5Njc3V2jOAjgAs7OzrKysMD8/v649b+LwxGPocIeB0n0A7ncP8EvPINE2hVIqs7S0NNnUOKlUinQ6zczMzPflR7VLLxfvMrH9JdJzMUICIIzGSB8fXXiTb/uGiYSDt1dXVy+nUqlTB6lUav3o0eOJyR8+5Y3ybkv4bAmj+TryAusvXeX5cCiTTqcnnampqbj2vJ2Lv9/l3e0vMEIh6l4jHE9PC9onkUbz4bm3+OnsMFKpQeV53nTx8QlrhZsYIRF1j/TUBxxVKvxVqVCr1bDWctIWIvfZ+xgleWf3JmNnztEbZFq5rjsyXN5Duict609qNZ48+IOHpRLHx8dYa3EDYRCNKJ7Li0d7HPYMjCjXdePxo32MaN7C/sEB9WqVSqVCtVpFSokO6RYLIySDf/7KfqQ/rrTW2P+Qgjt3fqS8V6BYLGKtJRaL8VzM95QHYLForVHGmMK99p4hcfTzaQQL7e3t2K4uhBBYa+no6KAtHIbSKVRhNNudfRhjCsoYs/VdKDqk/QEczwUL/jNRAvU6JtwBQDAYREW6YbfxuvJxK9RN1JgtZ3x8PO7W6zuvPjzgvd++QjsS6ekWsH95RkuJtIa1/tf4pvMsPr9/UGSz2YKQMnPd382NcD/SGoySGPFMN8Q3wn18HuhFSJnJZrMFmUwm2djY+OTK5UtvX2+L9j4IR3i9dojQLtZxAAdhNUgfa32v8HHnebpCgdu5XO5qMpk85To2NkYulyORSKxrz5soa7hSK3H+7yJYuNcZ41YoSkRYpFKZfD4/2dS0PiaRSJDP5xkdHY0D/7vOwLXNzc1CcxbgH/lpXYTK63B1AAAAAElFTkSuQmCC)} ';
var stylesheet = document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(css) + '"');
document.insertBefore(stylesheet, document.documentElement);
})();
Alles anzeigen
In der letzten Version des Skripts "ExtensionOptionsMenu.uc.js" bei Endor funktionieren im Fx 138 die oberen drei Buttons nicht mehr. Die Hauptfunktionen für die Add-ons funktionieren.
Im Skript gibt noch "on..."-Attribute von Elementen. Die Fehlerkonsole wirft für die Zeilen 132 und 202 entsprechende Fehler aus, wo diese Attribute verarbeitet werden.
Außerdem in Zeile 144 ein "onclick"-Attribut.
Obwohl es mir in einigen anderen Skripten mit den Hinweisen hier im Forum gelungen ist, passende Eventhandler hinzuzufügen, gelingt mir das bei diesem Skript an keiner Stelle.
Wer kann helfen?
Edit:
Alte Zeile 132 ersetzen durch
if(a === "oncontextmenu") {
toolbaritem.addEventListener('contextmenu', function(event) { Function(attributes[a])(); });
} else {
toolbaritem.setAttribute(a, attributes[a]);
}
alte Zeile 203 ersetzen durch
if(n === "oncommand") {
el.addEventListener('command', function(event) { Function(attr[n])(); });
}
else if(n === "onclick") {
el.addEventListener('click', function(event) { Function(attr[n])(); });
}
else if(n === "onmouseup") {
el.addEventListener('mouseup', function(event) { Function(attr[n])(); });
}
else {
el.setAttribute(n, attr[n]);
}
Alles anzeigen
alte Zeile 144 ersetzen durch
Das Thema CSP und das Anpassen von Inline-Event-Handlers war in den letzten Wochen und Monaten in Zusammenhang mit den Scripts ja relativ präsent in diesem Forum. Wer sich etwas für die Hintergründe interessiert, wieso Mozilla das gemacht hat (Mozilla selbst musste über 600 Inline-Event-Handler umstellen!), bekommt in Mozillas Sicherheits-Blog etwas Lesematerial:
Danke, Sören!
Ich habe in dem Text nicht verstanden, warum die Inline Eventhandler entfernt wurden. Dort steht doch, dass sie mit einer CSP gegen Missbrauch abgesichert werden können. Ich habe da noch eine Verständnislücke.
Entschuldigung, deine Antwort ist bei mir untergegangen. Ja, das ist die Zeile.
Ich sehe in der Konsole diese Fehlermeldung:
undefined has no properties addons_ver_day_updatecheck.uc.js:10:5
Kann damit jemand was anfangen?
kann ich das Popup-Menü nicht mehr scrollen.
Teste bitte mal dieses angepasste Skript: ...
Solltest du in der userChrome.css einen Code für die Scrollleiste haben, den dann bitte mal entfernen.
Die ist jetzt im Skript enthalten, Zeile 54 - 60. Dort kannst du dir die Höhe vom Popup noch anpassen.
Funktioniert! Dankeschön! Edit: auch ohne Zeile 8. HelperAppDlg wird nirgendwo verwendet.
Edit:
Es hat bis vor einiger Zeit noch funktioniert. Wenn ich das mit dem von lenny2 zitierten Thema vergleiche, sieht es so aus, als hätte ich mir die bereits geänderte Version irgendwie zerschossen. Dann lag es wohl nicht am Fx-Update.
Im Skript SaveTo.uc.js kann ich das Popup-Menü nicht mehr scrollen. Dadurch komme ich in einem Menü mit vielen Einträgen nicht mehr an die unteren Einträge heran. Das könnte auch schon im Fx135 so gewesen sein.
In der Version im Github von Endor ist das auch so.
Hier meine Version
// ==UserScript==
// @include chrome://mozapps/content/downloads/unknownContentType.xhtml
// @charset UTF-8
// @version Fx104+
// ==/UserScript==
(function () {
if (location != 'chrome://mozapps/content/downloads/unknownContentType.xhtml')
return;
const { FileUtils } = ChromeUtils.importESModule( 'resource://gre/modules/FileUtils.sys.mjs');
setTimeout(function () {
saveTo();
}, 200);
function saveTo() {
// Config
const dirArray = [
['F:\\Users\\bege\\Desktop', 'Desktop'],
['F:\\Downloads', 'Downloads'],
['F:\\Eigene Dateien\\Eigene Bilder\\Symbole', 'Symbole'],
['F:\\Users\\bege\\AppData\\Roaming\\Mozilla\\Firefox\\icons', 'Firefox\\Icons'],
['F:\\Setups\\Audio-Video', 'Setups\\Audio-Video'],
['F:\\Setups\\Dateiverwaltung', 'Setups\\Dateiverwaltung'],
['F:\\Setups\\Dateiverwaltung\\FreeCommander', 'Setups_FreeCommander'],
['F:\\Setups\\Editoren', 'Setups\\Editoren'],
['F:\\Setups\\Editoren\\Notepad++', 'Setups\\Notepad++'],
['F:\\Setups\\Grafik', 'Setups\\Grafik'],
['F:\\Setups\\Internet', 'Setups\\Internet'],
['F:\\Setups\\Office\\LibreOffice', 'Setups_LibreOffice'],
['F:\\Setups\\Sicherheit\\KeePass', 'Setups\\Sicherheit\\KeePass'],
['F:\\Setups\\Tools', 'Setups\\Tools'],
['F:\\Setups\\Tools\\W10', 'Setups\\Tools\\W10'],
['F:\\Setups\\Wartung', 'Setups\\Wartung'],
['F:\\Setups\\Wartung\\System u. Hardware', 'Setups\\Wartung\\System, Hardw.'],
['F:\\Eigene Dateien\\Eigene Bilder\\aktuelleDownloads', 'Bilder'],
['F:\\Eigene Dateien\\Eigene Musik\\aktuelleDownloads', 'Musik'],
['F:\\Eigene Dateien\\Eigene Videos\\aktuelleDownloads', 'Videos'],
[FileUtils.getDir('UChrm', []).path, 'chrome'],
[FileUtils.getDir('UChrm', ['CSS']).path, 'CSS'],
[FileUtils.getDir('UChrm', ['JS']).path, 'JS'],
/* ['C:\\', 'C:'],
['E:\\', 'E:'],
['F:\\', 'F:'],
['S:\\', 'S:']
*/ ];
const button = document.getElementById('unknownContentType').getButton('cancel');
const saveTo = button.parentNode.insertBefore(document.createXULElement('button'), button);
const saveToMenu = saveTo.appendChild(document.createXULElement('menupopup'));
saveTo.classList.toggle('dialog-button');
saveTo.label = 'Speichern in…';
saveTo.type = 'menu';
const css =`
hbox.dialog-button-box button.dialog-button menupopup {
// color: white !important;
background: #eeeeee !important;
}
hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic {
padding-left: 8px !important;
}
hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic:hover {
background: red !important;
// color: white !important;
}
//hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-iconic-left {
// transform: scale(.5) !important;
//max-height: 20px !important;
//}
hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic label.menu-iconic-text {
padding-right: 8px !important;
padding-left: 8px !important;
color: black !important;
}
//hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-accel-container {
//max-height: 18px !important;
//}
`;
const sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
const uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css));
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
dirArray.forEach(function (directory) {
const [name, dir] = [directory[1], directory[0]];
const mi = document.createXULElement('menuitem');
const item = saveToMenu.appendChild(mi);
item.setAttribute('label', (name || (dir.match(/[^\\/]+$/) || [dir])[0]));
item.setAttribute('image', 'moz-icon:file:///' + dir + '\\');
item.setAttribute('class', 'menuitem-iconic');
item.addEventListener('command', function () {
const locationtext = document.getElementById('locationtext');
const pathFile = dir + '\\' + (locationtext ? locationtext.value : document.getElementById('location').value);
const file = new FileUtils.File(pathFile);
dialog.mLauncher.saveDestinationAvailable(file);
dialog.onCancel = function () {};
close();
});
});
}
}());
Alles anzeigen
Dieses Skript spielt keinen Ton mehr ab, wenn ein Download fertig ist, seit dem Update auf Fx 136.
// ==UserScript==
// @name downloadSoundPlay_Fx26.uc.js
// @namespace http://space.geocities.yahoo.co.jp/gl/alice0775
// @description Downloads überwachen und Ton Dateien für Download-Manager abspielen
// @include main
// @compatibility Firefox 115
// @author Alice0775
// @version 2023/10/13 use ChromeUtils.import instead of XPCOMUtils.defineLazyModuleGetter
// @version 2016/03/15 hack of selection chanhe
// @version 2015/01/15 1:00 Fixed strictmode
// @version 2013/12/18 11:00 defineLazyModuleGetter for Firefox26
// @version 2013/12/18 Firefox26
// @version 2009/11/28
// ==/UserScript==
var downloadPlaySound = {
// -- config --
DL_START : null,
DL_DONE : "file:///C:/WINDOWS/Media/tada.wav",
DL_CANCEL: null,
DL_FAILED: "file:///C:/Windows/Media/XP/Windows Error.wav",
// -- config --
_list: null,
init: function sampleDownload_init() {
const { Downloads } = ChromeUtils.import(
"resource://gre/modules/Downloads.jsm");
//window.removeEventListener("load", this, false);
window.addEventListener("unload", this, false);
//**** Download-Überwachung hinzufügen
if (!this._list) {
Downloads.getList(Downloads.ALL).then(list => {
this._list = list;
return this._list.addView(this);
}).then(null, Cu.reportError);
}
},
uninit: function() {
window.removeEventListener("unload", this, false);
if (this._list) {
this._list.removeView(this);
}
},
onDownloadAdded: function (aDownload) {
//**** Startereignis herunterladen
if (this.DL_START)
this.playSoundFile(this.DL_START);
},
onDownloadChanged: function (aDownload) {
//**** Download abbrechen
if (aDownload.canceled && this.DL_CANCEL)
this.playSoundFile(this.DL_CANCEL)
//**** Herunterladen fehlgeschlagen
if (aDownload.error && this.DL_FAILED)
this.playSoundFile(this.DL_FAILED)
//**** Download abgeschlossen
if (typeof aDownload.downloadPlaySound == "undefined" &&
aDownload.succeeded && aDownload.stopped && this.DL_DONE) {
aDownload.downloadPlaySound = true;
this.playSoundFile(this.DL_DONE);
}
},
playSoundFile: function(aFilePath) {
if (!aFilePath)
return;
var ios = Components.classes["@mozilla.org/network/io-service;1"]
.createInstance(Components.interfaces["nsIIOService"]);
try {
var uri = ios.newURI(aFilePath, "UTF-8", null);
} catch(e) {
return;
}
var file = uri.QueryInterface(Components.interfaces.nsIFileURL).file;
if (!file.exists())
return;
this.play(uri);
},
play: function(aUri) {
var sound = Components.classes["@mozilla.org/sound;1"]
.createInstance(Components.interfaces["nsISound"]);
sound.play(aUri);
},
handleEvent: function(event) {
switch (event.type) {
case "unload":
this.uninit();
break;
}
}
}
downloadPlaySound.init();
Alles anzeigen
Die Fehlerkonsole wirft den Fehler aus, dass in Zeile 26 ChromeUtils.import keine Funktion ist.
Nach der Änderung in ChromeUtils.importESModule kommt die Fehlermeldung
"Failed to load resource://gre/modules/Downloads.jsm"
Edit: Doch noch selbst herausgefunden. Das hier funktioniert.
// ==UserScript==
// @name downloadSoundPlay_Fx26.uc.js
// @namespace http://space.geocities.yahoo.co.jp/gl/alice0775
// @description Downloads überwachen und Ton Dateien für Download-Manager abspielen
// @include main
// @compatibility Firefox 115
// @author Alice0775
// @version 2023/10/13 use ChromeUtils.import instead of XPCOMUtils.defineLazyModuleGetter
// @version 2016/03/15 hack of selection chanhe
// @version 2015/01/15 1:00 Fixed strictmode
// @version 2013/12/18 11:00 defineLazyModuleGetter for Firefox26
// @version 2013/12/18 Firefox26
// @version 2009/11/28
// ==/UserScript==
var downloadPlaySound = {
// -- config --
DL_START : null,
DL_DONE : "file:///C:/WINDOWS/Media/tada.wav",
DL_CANCEL: null,
DL_FAILED: "file:///C:/Windows/Media/XP/Windows Error.wav",
// -- config --
_list: null,
init: function sampleDownload_init() {
const { Downloads } = ChromeUtils.importESModule(
"resource://gre/modules/Downloads.sys.mjs");
//window.removeEventListener("load", this, false);
window.addEventListener("unload", this, false);
//**** Download-Überwachung hinzufügen
if (!this._list) {
Downloads.getList(Downloads.ALL).then(list => {
this._list = list;
return this._list.addView(this);
}).then(null, Cu.reportError);
}
},
uninit: function() {
window.removeEventListener("unload", this, false);
if (this._list) {
this._list.removeView(this);
}
},
onDownloadAdded: function (aDownload) {
//**** Startereignis herunterladen
if (this.DL_START)
this.playSoundFile(this.DL_START);
},
onDownloadChanged: function (aDownload) {
//**** Download abbrechen
if (aDownload.canceled && this.DL_CANCEL)
this.playSoundFile(this.DL_CANCEL)
//**** Herunterladen fehlgeschlagen
if (aDownload.error && this.DL_FAILED)
this.playSoundFile(this.DL_FAILED)
//**** Download abgeschlossen
if (typeof aDownload.downloadPlaySound == "undefined" &&
aDownload.succeeded && aDownload.stopped && this.DL_DONE) {
aDownload.downloadPlaySound = true;
this.playSoundFile(this.DL_DONE);
}
},
playSoundFile: function(aFilePath) {
if (!aFilePath)
return;
var ios = Components.classes["@mozilla.org/network/io-service;1"]
.createInstance(Components.interfaces["nsIIOService"]);
try {
var uri = ios.newURI(aFilePath, "UTF-8", null);
} catch(e) {
return;
}
var file = uri.QueryInterface(Components.interfaces.nsIFileURL).file;
if (!file.exists())
return;
this.play(uri);
},
play: function(aUri) {
var sound = Components.classes["@mozilla.org/sound;1"]
.createInstance(Components.interfaces["nsISound"]);
sound.play(aUri);
},
handleEvent: function(event) {
switch (event.type) {
case "unload":
this.uninit();
break;
}
}
}
downloadPlaySound.init();
Alles anzeigen
Hier wird beschrieben, was du dazu brauchst:
Manchmal frage ich mich, warum Leute Artikel nicht bis zum Ende lesen. Heute frage ich mich das über mich selbst. Da steht es am Ende. 🙄
So, Button weg, User zufrieden! Dankeschön euch!
Es sieht so aus, als ob die Elemente unter #shadow-root liegen, sprich, CSS-Anweisungen müssen in die userChromeShadow.css und nicht in die userChrome.css.
Wenn ich das Skript zum Laden der userChromeShadow.css doch mal brauche, wie muss dieses Skript aussehen? Der verlinkte Code von aborix ist nur ein Schnipsel.
Ich lade die CSS-Dateien mit dem userCSSLoader. Mit der Datei, in die ich den Code eingefügt hatte, funktioniert etwas nicht. In einer neuen Datei klappt's. Vielen Dank!
Es sieht so aus, als ob die Elemente unter #shadow-root liegen, sprich, CSS-Anweisungen müssen in die userChromeShadow.css und nicht in die userChrome.css.
Weil im angepinnten Beitrag von BrokenHeart steht:
Die neue Methode um 'css'-Regeln anzuwenden, wird nur für Regeln benötigt, die einen ::part() Selektor beinhalten.
dachte ich, das gilt hier nicht. Ist diese Einschränkung überholt?
Klappe mal bitte den genauen Bereich im Inspektor weiter auf - also unter moz-button... Vielleicht sehe ich dann eine Möglichkeit..
Es geht um den hier:
Ich finde es sieht so aus, als ob er gleich runterfällt, der Arme. 😢
Aktuell ist Firefox 135. Wenn du jetzt für v134 anpackst, kannst du für v135 wieder alles neu denken.
Ich habe mich vertippt, ich habe Fx 135 und deswegen alle Skripte aktualisiert.
Verschiebbar konnte ich es mit einigen Versuchen machen, aber der Text wurde dann nicht mehr angezeigt
Hallo,
kann mir jemand dabei helfen, dieses clickbare Panel verschiebbar zu machen? Bisher wird es über die ID eines benachbarten Elements positioniert. Ich würde es gern wie einen Button verschiebbar machen. Geht das?
// ==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 17 u. 18 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