Hier beim Autor des Skripts ist sogar noch eine aktuellere Version:
https://github.com/alice0775/user…tusModoki.uc.js
Es gibt noch eine CSS-Datei dazu:
Hier beim Autor des Skripts ist sogar noch eine aktuellere Version:
https://github.com/alice0775/user…tusModoki.uc.js
Es gibt noch eine CSS-Datei dazu:
Abendstern2010 Die von dir verlinkte Version ist 6 Jahre alt. Ich habe hier aber eine Version, die im Nightly noch funktioniert.
// ==UserScript==
// @name ucjsDownloadsStatusModoki.uc.js
// @namespace http://space.geocities.yahoo.co.jp/gl/alice0775
// @description Downloads Status Modoki
// @include main
// @compatibility Firefox 71+
// @author Alice0775
// @note ucjsDownloadsStatusModoki.uc.js.css muss über die userChrome.css Datei geladen werden
// @version 2019/10/20 12:30 workaround Bug 1497200: Apply Meta CSP to about:downloads, Bug 1513325 - Remove textbox binding
// @version 2019/09/08 19:30 fix scrollbox
// @version 2019/05/21 08:30 fix 69.0a1 Bug 1551320 - Replace all createElement calls in XUL documents with createXULElement
// @version 2018/10/27 12:00 fix for 64+
// @version 2018/06/12 21:00 fix for private window mode
// @version 2018/06/07 12:00 fix file name for history
// @version 2018/02/10 12:00 try catch error when DO_NOT_DELETE_HISTORY = true
// @version 2017/12/10 12:00 fix error when DO_NOT_DELETE_HISTORY = true
// @version 2017/12/10 12:00 remove workaround Bug 1279329. Disable btn while clear list is doing, close button styling for 57.
// @version 2016/06/10 12:00 modify style independent of font-family
// @version 2016/06/10 07:00 modify style of close button, fix typo
// @version 2016/06/10 00:00 Workaround Bug 1279329. adjust some padding
// @version 2015/05/08 00:00 remove padding due to Bug 1160734
// @version 2014/03/31 00:00 fix for browser.download.manager.showWhenStarting
// @version 2013/12/22 13:00 chromehidden
// @version 2013/12/19 17:10 rename REMEMBERHISTOTY to DO_NOT_DELETE_HISTORY
// @version 2013/12/16 23:28 fixed initialize numDls
// @version 2013/12/16 23:24 open only download added
// @version 2013/12/16 23:10 open only download started
// @version 2013/12/16 21:20 modify css Windows7 Aero
// @version 2013/12/16 21:00 modify css
// @version 2013/12/16 19:30 add autocheck false
// @version 2013/12/16 18:31 fix pref name
// @version 2013/12/16 18:30
// @note
// ==/UserScript==
var ucjsDownloadsStatusModoki = {
_summary: null,
_list: null,
get downloadsStatusModokiBar() {
delete downloadsStatusModokiBar;
return this.downloadsStatusModokiBar = document.getElementById("downloadsStatusModokiBar");
},
get toggleMenuitem() {
delete toggleMenuitem;
return this.toggleMenuitem = document.getElementById("toggle_downloadsStatusModokiBar");
},
init: function() {
if (document.documentElement.getAttribute("chromehidden") !="" )
return;
XPCOMUtils.defineLazyModuleGetter(window, "Downloads",
"resource://gre/modules/Downloads.jsm");
var style = `
@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);
#ucjsDownloadsStatusModoki {
width: 100%;
max-height: 100px;
height: 39px;
}
`.replace(/\s+/g, " ");
var sspi = document.createProcessingInstruction(
'xml-stylesheet',
'type="text/css" href="data:text/css,' + encodeURIComponent(style) + '"'
);
document.insertBefore(sspi, document.documentElement);
sspi.getAttribute = function(name) {
return document.documentElement.getAttribute(name);
};
var toolbar = document.createXULElement("vbox");
toolbar.setAttribute("id", "downloadsStatusModokiBar");
toolbar.setAttribute("collapsed", true);
var bottombox = document.getElementById("browser-bottombox");
bottombox.appendChild(toolbar);
var browser = toolbar.appendChild(document.createXULElement("browser"));
browser.setAttribute("disablehistory", true);
browser.setAttribute("remote", false);
browser.setAttribute("id", "ucjsDownloadsStatusModoki");
browser.addEventListener("load", function(event){ucjsDownloadsStatusModoki.onload(event)}, true);
browser.setAttribute("src", "chrome://browser/content/downloads/contentAreaDownloadsView.xhtml?StatusModoki");
var menuitem = document.createXULElement("menuitem");
menuitem.setAttribute("id", "toggle_downloadsStatusModokiBar");
menuitem.setAttribute("type", "checkbox");
menuitem.setAttribute("autocheck", false);
menuitem.setAttribute("label", "Download Leiste");
menuitem.setAttribute("checked", false);
menuitem.setAttribute("accesskey", "D");
menuitem.setAttribute("oncommand", "ucjsDownloadsStatusModoki.toggleDownloadsStatusModokiBar()");
var ref = document.getElementById("menu_customizeToolbars");
ref.parentNode.insertBefore(menuitem, ref.previousSibling);
// Ensure that the DownloadSummary object will be created asynchronously.
if (!this._summary) {
Downloads.getSummary(Downloads.ALL).then(summary => {
this._summary = summary;
return this._summary.addView(this);
}).then(null, Cu.reportError);
}
if (!this._list) {
Downloads.getList(Downloads.ALL).then(list => {
this._list = list;
return this._list.addView(this);
}).then(null, Cu.reportError);
}
window.addEventListener("unload", this, false);
},
uninit: function() {
window.removeEventListener("unload", this, false);
if (this._summary) {
this._summary.removeView(this);
}
if (this._list) {
this._list.removeView(this);
}
},
handleEvent: function(event) {
switch (event.type) {
case "unload":
this.uninit();
break;
}
},
toggleDownloadsStatusModokiBar: function() {
var collapsed = this.downloadsStatusModokiBar.collapsed;
this.downloadsStatusModokiBar.collapsed = !collapsed;
this.toggleMenuitem.setAttribute("checked", collapsed);
},
openDownloadsStatusModoki: function() {
this.downloadsStatusModokiBar.collapsed = false;
this.toggleMenuitem.setAttribute("checked", true);
},
hideDownloadsStatusModoki: function() {
this.downloadsStatusModokiBar.collapsed = true;
this.toggleMenuitem.setAttribute("checked", false);
},
onDownloadAdded: function (aDownload) {
Cu.import("resource://gre/modules/Services.jsm");
var showWhenStarting = true;
try {
showWhenStarting = Services.prefs.getBoolPref("userChrome.downloadsStatusModoki.showWhenStarting");
} catch(e) {}
this.numDls = 0;
if (showWhenStarting) {
if (this._list) {
this._list.getAll().then(downloads => {
for (let download of downloads) {
if (!download.stopped)
this.numDls++;
}
if (this.numDls > 0)
this.openDownloadsStatusModoki(false);
}).then(null, Cu.reportError);
}
}
},
onSummaryChanged: function () {
Cu.import("resource://gre/modules/Services.jsm");
if (!this._summary)
return;
if (this._summary.allHaveStopped || this._summary.progressTotalBytes == 0) {
var closeWhenDone = false;
try {
closeWhenDone = Services.prefs.getBoolPref("userChrome.downloadsStatusModoki.closeWhenDone");
} catch(e) {}
if (closeWhenDone) {
this.hideDownloadsStatusModoki();
}
}
},
// chrome://browser/content/downloads/contentAreaDownloadsView.xhtml
onload: function(event) {
var doc = event.originalTarget;
var win = doc.defaultView;
doc.documentElement.setAttribute("ucjsDownloadsStatusModoki", "true");
var button = doc.createXULElement("button");
button.setAttribute("label", "Löschen");
button.setAttribute("id", "ucjs_clearListButton");
button.setAttribute("accesskey", "L");
var ref = doc.getElementById("downloadCommands");
var vbox = doc.createXULElement("vbox");
var box = vbox.appendChild(doc.createXULElement("hbox"));
box.appendChild(button);
box.appendChild(doc.createXULElement("spacer")).setAttribute("flex", 1);
var textbox = doc.createElementNS("http://www.w3.org/1999/xhtml", "input");
textbox.setAttribute("id", "downloadFilter");
textbox.setAttribute("clickSelectsAll", true);
textbox.setAttribute("type", "search");
textbox.setAttribute("placeholder", "Suchen...");
box.appendChild(textbox);
var closebtn = doc.createXULElement("toolbarbutton");
closebtn.setAttribute("id", "ucjsDownloadsStatusModoki-closebutton");
closebtn.setAttribute("class", "close-icon");
closebtn.setAttribute("tooltiptext", "Download-Leiste schließen");
box.appendChild(closebtn);
ref.parentNode.insertBefore(vbox, ref);
doc.getElementById("ucjs_clearListButton").addEventListener("command", function(event) {
win.ucjsDownloadsStatusModoki_clearDownloads();
});
doc.getElementById("downloadFilter")
.addEventListener("input", function(event) {
win.ucjsDownloadsStatusModoki_doSearch(event.target.value);
});
doc.getElementById("ucjsDownloadsStatusModoki-closebutton")
.addEventListener("command", function(event) {
win.ucjsDownloadsStatusModoki_doClose();
});
/*
// xxx Bug 1279329 "Copy Download Link" of context menu in Library is grayed out
var listBox = doc.getElementById("downloadsRichListBox");
var placesView = listBox._placesView;
if (placesView) {
var place = placesView.place;
placesView.place= null;
placesView.place = place;
}
*/
win.ucjsDownloadsStatusModoki_clearDownloads = function ucjs_clearDownloads() {
var DO_NOT_DELETE_HISTORY = true; /* custmizable true or false */
var richListBox = doc.getElementById("downloadsRichListBox");
Cu.import("resource://gre/modules/Services.jsm");
var places = [];
function addPlace(aURI, aTitle, aVisitDate) {
places.push({
uri: aURI,
title: aTitle,
visits: [{
visitDate: (aVisitDate || Date.now()) * 1000,
transitionType: Ci.nsINavHistoryService.TRANSITION_LINK
}]
});
}
function moveDownloads2History() {
if (DO_NOT_DELETE_HISTORY &&
!PrivateBrowsingUtils.isWindowPrivate(window)) {
try {
for (let element of richListBox.childNodes) {
let download = element._shell.download;
let aURI = makeURI(download.source.url);
// let aTitle = document.getAnonymousElementByAttribute(element, "class", "downloadTarget").value
let aTitle = download.target.path;
aTitle = aTitle.match( /[^\\]+$/i )[0];
aTitle = aTitle.match( /[^/]+$/i )[0];
let aVisitDate = download.endTime || download.startTime;
addPlace(aURI, aTitle, aVisitDate)
}
} catch(ex) {}
}
// Clear List
richListBox._placesView.doCommand('downloadsCmd_clearDownloads');
if (DO_NOT_DELETE_HISTORY &&
!PrivateBrowsingUtils.isWindowPrivate(window)) {
try {
if (places.length > 0) {
var asyncHistory = Components.classes["@mozilla.org/browser/history;1"]
.getService(Components.interfaces.mozIAsyncHistory);
asyncHistory.updatePlaces(places);
}
} catch(ex) {}
}
}
var btn = doc.getElementById("ucjs_clearListButton");
btn.setAttribute("disabled", true);
moveDownloads2History();
btn.removeAttribute("disabled");
// close toolbar
var closeWhenDone = false;
try {
closeWhenDone = Services.prefs.getBoolPref("userChrome.downloadsStatusModoki.closeWhenDone");
} catch(e) {}
if (closeWhenDone) {
top.ucjsDownloadsStatusModoki.hideDownloadsStatusModoki();
}
};
win.ucjsDownloadsStatusModoki_doSearch = function ucjs_doSearch(filterString) {
var richListBox = doc.getElementById("downloadsRichListBox");
richListBox._placesView.searchTerm = filterString;
};
win.ucjsDownloadsStatusModoki_doClose = function ucjs_doClose() {
top.ucjsDownloadsStatusModoki.hideDownloadsStatusModoki();
};
}
}
ucjsDownloadsStatusModoki.init();
Alles anzeigen
Ich konnte jenen User dazu überreden, auch ein Skript für F2 zu schreiben. Er warnt jedoch davor, die Funktion von F13 zu verändern, denn das würde einen bösen hamsterfressenden Dämon wecken.
Die Skripten sind ja Hammer, aber zu kompliziert für mich.
Ja, eine zip-Datei herunterladen, entpacken, die enthaltenen Dateien in das Profil- bzw. Installationsverzeichnis kopieren, das Skript in einer Datei im Ordner chrome des Profilverzeichnisses abspeichern - ja, das ist wirklich sehr kompliziert.
Ah, danke, wieder etwas gelernt. Man lernt eben nie aus.
Du musst dich schon entscheiden. Wie oben in Beitrag #7 angeführt, kann die ID-Nr. der Erweiterung abweichen und ich nehme mal an, dass beide Firefox-Versionen unterschiedliche ID-Nummern bei dir haben. Du kannst dich also nicht auf die Nummer oben verlassen. Gib mal about:debugging in die Adressleiste ein - wenn du beide Firefox-Versionen verwendest, in beiden - klicke links auf „Dieser Firefox“ und suche rechts den Eintrag zu NoScript. Unter „Interne UUID“ findest du die betreffende Nummer.
Diese CSS-Datei funktioniert nicht mehr. Sie verwendet noch XBL-Binding, das nicht mehr von Firefox unterstützt wird, Mozilla hat es abgeschafft. Außerdem hättest du dafür eine XML-Datei gleichen Namens gebraucht, die hast du wahrscheinlich nicht heruntergeladen, ebenso den Ordner image für zwei Grafiken.
Ich frage, weil ich ja die Add-ons verlieren wurde und die wieder genauso einzurichten, wie ich sie jetzt habe, wäre etwas aufwändig.
So aufwändig ist das nicht. Ein Großteil der Erweiterungen bringt Firefox selbst mit, die gehen gar nicht verloren, z. B. Suchmaschinen. Die Erweiterungen in Zeile 131 bis 146 sind alle auf false gesetzt, z. B. Classic Theme Restorer. Diese Erweiterungen sind noch alten Typs und funktionieren schon seit 2 Jahren nicht mehr, seit Firefox 57. Die sind Ballast und Ballast verlangsamt.
nur leider weis ich nicht ob es Sinnvoll oder eher Sinnlos ist.
Das hängt davon ab, wieviel Code du erfasst. Wenn das ellenlang wird, geht die Übersicht verloren. Das ist im Grunde ähnlich, wie wenn du alle möglichen CSS-Codes für die unterschiedlichsten Zwecke in die userChrome.css packst. Du musst dann ganz diszipliniert Kommentare dazu schreiben. Meine Datei nur für die Gestaltung dieses Forums hat 515 Zeilen.
Dazu gibt es folgenden Bugreport:
Probiert mal statt display: background-image
Gern geschehen. Dafür sind wir da.
Ein Benutzerskript hat nichts mit der userChrome.css zu tun, ein Skript ist kein CSS-Code. Wenn du bisher keine Benutzerskripte genutzt hast, musst du erst dafür Vorbereitung treffen. Lies dir dazu folgenden Beitrag durch:
Firefox-Anpassungen: die Basis
Lade dir dann von folgender Seite, die Datei firefox-anpassungen.zip herunter, entpacke sie und kopiere die darin enthaltenen Dateien und den Ordner - wie hinter vorigem Link beschrieben - in das Profilverzeichnis bzw. Installationsverzeichnis.
https://github.com/Endor8/userChr…ster/userChrome
Du hast doch schon mit Scripts gearbeitet, wie man in diversen anderen Beiträgen von dir sieht. Das funktioniert ganz genauso.
Wenn dem so ist, hast du wahrscheinlich schon alles vorbereitet, dann brauchst du nur den Code von aborix als Textdatei mit der Endung .uc.js im Ordner chrome des Profilverzeichnisses abspeichern.
Erst einmal herzlichen Dank.
Gern geschehen. Schön, dass es geklappt hat.
Leider hatte ich wieder den Fehler gemacht, das ganze über %AppData% aufzurufen.
Ja, damit wird der Pfad zum Programm aufgerufen und nicht zum Profil.
So kann ich es mir wenigstens merken.
Deshalb wurde die Schrift erfunden.
Ah, Nachbarkombinator, kenn ich. Nur mit dem Erkennen der Einsatzmöglichkeiten hapert es bei mir noch. Danke für den Tipp aborix.
So, dann müsste es auch so funktionieren:
#context_duplicateTabs + menuseparator {
display: none !important;
}
#context_sendTabToDevice + menuseparator {
display: none !important;
}
oder in zusammengefasster Schreibweise:
Ja, hier muss man es wohl so machen. Im Gegensatz zum Seiten-Kontextmenü haben die Trennlinien hier keine ID.
Man muss dazu sagen, dass dieser Code theoretisch alle Trennlinien ausblendet, die sich im Tab-Kontextmenü befinden. Ich habe hier noch alle Einträge und es sind auch nicht mehr als zwei Trennlinien. Da Fox2Fox die meisten Einträge ausgeblendet hat, sind diese Trennlinien überflüssig geworden. Manche Erweiterungen tragen sich da ein (z. B. Autoreload), Trennlinien, die dann erst entstünden, würden dann nicht angezeigt.
Warum bleibst du denn nicht angemeldet? Mich würde mehr stören, dass erst einmal das Anmeldefenster geladen wird. Der kleine Klick auf die Meldung ist doch nicht der Rede wert.
Mit diesem Code klappt es. Habe testweise mal 5 Reihen angelegt, es macht sich auch kein Scrollbalken breit.
Besten Dank!
Gern geschehen. Habe ich dich doch nicht falsch verstanden. Ich bin jetzt durch die Beiträge von Andreas und BrokenHeart unsicher geworden, ob du eine Bildlaufleiste haben wolltest oder nicht.
Ach, bei mir gibt es keine Bildlaufleiste, da ich den Selektor scrollbar weggelassen habe, aufgrund folgender Bemerkung auf der japanischen Seite, von der der Code stammt:
ZitatWenn Sie ___ userChrome.css kopieren und einfügen, ändern Sie #PlacesToolbarItems> Bildlaufleiste in Zeile 23 in #PlacesToolbarItems. Wenn Sie dies nicht tun, können Sie die Bildlaufleiste, die in drei oder mehr Schritten angezeigt wird, nicht berühren.
Übersetzt mit der Erweiterung WebTranslate. So genau weiß ich aber, was damit gemeint ist. Der Selektor wurde durch die Erweiterung mitübersetzt, dort muss aber scrollbar stehen bleiben.