Das tut mir leid, wenn du ein Problem damit hast, wie ich meine Frage formuliert habe, aber es war eine legitime Frage, woher diese Annahme stammt.
OK.
Das tut mir leid, wenn du ein Problem damit hast, wie ich meine Frage formuliert habe, aber es war eine legitime Frage, woher diese Annahme stammt.
OK.
Wie kommst du darauf, dass Link Prefetching dafür sorgen würde, dass ein nicht besuchter Link als besucht markiert wird?
Das stimmt definitiv nicht und würde auch keinen Sinn ergeben.
Ja, dann lag ich eben falsch und du hast es richtig gestellt.
(Der vorwurfsvolle Stil Deiner Frage gefällt mir gar nicht.)
Habe ein js-script gefunden
Habe ein weiteres js-script gefunden
Einerseits: Nett, dass Du auf Funde hinweist, aber andererseits: Wäre es nicht einfacher, direkt auf https://github1s.com/aminomancer/uc…b/master/script und eventuell sogar die Originalseite https://github.com/aminomancer/uc.css.js zu verlinken? Dann könnten sich andere auch (leichter) die weiteren Skripte ansehen.
Das Script stellt das alte Verhalten für einmalige Suchmaschinen-Schaltflächen wieder her
Alternativer Tipp von mir: alternative_searchbar.uc.js von https://github.com/Aris-t2/CustomJSforFx.
Ich habe festgestellt das es mitunter sehr schwierig ist in der Chronik die richtige Webseit heraus zu finden.
Man kann die Chronik auch noch durchsuchen.
Warum ist beim erneuten Aufruf der Seite, nach dem löschen der Chronik, der Link rot wenn ich diesen noch nicht angewählt habe.
Hast Du eventuell Prefetch aktiviert? Siehe dazu im Mozilla-Support: Firefox baut unaufgefordert Verbindungen auf – Vorabladen von Inhalten.
Die testweise Installation der Skripte zur Umgehung der Altersbeschränkung auf Youtube hatte keine Wirkung.
YouTube: Age Verification Bypass funktioniert bei mir.
Ich habe gestern angefangen den readme für das Script zu erweitern.
Gefällt mir. Wer nicht weiß, wie man die Werte ändert, kann doch nachfragen …
Bei manchen ist die Quelle auch überhaupt nicht mehr bekannt. Und es kursieren auch oft mehrere Versionen.
Man hat das Skript mal irgendwo herbekommen. Diesen Link gibt man dann an.
Aborix stellt seine Skripte nur hier rein.
Hier wäre das dann der Link zum jeweiligen Posting.
Man müsste also das Forum nach den Skripten durchsuchen, um die Beiträge zu finden.
Nein, wenn man sich den Link in die erste Zeile des Skripts als Kommentar kopiert. Das hätte den angenehmen Nebeneffekt, dass er bei einer Neuveröffentlichung automatisch mit kopiert würde – er muss dann natürlich angepasst werden, wenn es ein Update gibt. Mach ich für mich bei Skripten hier aus dem Forum seit Jahren so (Aris und AliceWhite0775 haben selbst entsprechende identifizierende Zeilen in ihren Skripten). Es wird dann noch wenige Ausnahmen geben, wo das alles nicht möglich ist, damit muss man dann leben (wenn das Skript ursprünglich in einer Konversation veröffentlicht wurde, könnte darauf aber beispielsweise hingewiesen werden; ich würde mir selbst dann den Link auf dieses Posting setzen). Hier im Thread habe ich es nicht gemacht, weil ich der Meinung war, dass es aus dem Kontext klar wird.
Wir können von mir aus hiermit aber Schluss machen, weil ich das Gefühl habe dass ich sinnlos gegen Windmühlen ankämpfe.
Du benötigst ein sogenanntes Userskript (nicht zu verwechseln mit UserChrome-Skript). Dazu musst Du dir eines der Monkey-Addons installieren und dann nach einem passenden Skript suchen. das Problem ist, dass YouTube immer mal wieder Änderungen durchführt und bisherige Skripte dann manchmal nicht mehr funktionieren, so dass man dann nach aktualisierten Skripten suchen muss, denn leider machen das nicht alle der Skriptautoren.
Wegen der Addons: Ich selbst benutze Violentmonkey, aber vielleicht kommst Du mit dem Original Greasemonkey oder mit Tampermonkey besser klar – und ich habe eben einen interessanten Neuling entdeckt: FireMonkey (der auch Userstile integriert!).
Wegen der Skripte: Man muss immer mal wieder in Greasy Fork oder OpenUserJS nach "youtube autoplay" suchen. Ich selbst nutzte sehr lange No Youtube Autoplay - Next video button disable / disabled, das aber letztes Jahr nicht mehr funktionieren wollte und weswegen ich auf YouTube Click To Play auswich, was wiederum kürzlich ebenfalls Probleme machte. Das alte Skript hatte ich zum Glück nicht gelöscht, sondern nur deaktiviert, so dass ich bemerkte, dass es kürzlich ein Update gab.
Mein Vorschlag dazu das Script so wie es ab Firefox 87 läuft
bei Github hochladen und in der readme dann weitere Erklärungen und
Änderungsbeispiele anführen.
Gute Idee! Also nochmal
Milupo, noch einmal …
Allerdings hast Du natürlich insofern Recht, als es viiiel einfacher ist, nur den dritten Wert an den zweiten anzupassen.
Das war gewissermaßen schon eine Art des Einlenkens, während ich meinen Beitrag schrieb.
Hilft aber nur, wenn man auch dorthin verlinkt.
Das ist ja im Prinzip seit Jahren mein Reden, dass man die Quelle wenigstens nennt … einerseits wegen der Urheberschaft, aber auch, weil man dann unter Umständen nach Aktualisierungen sehen kann (externe Skripte, Skripte hier in einem Thema, das man verpasst hat …). Ich erzeuge damit aber irgendwie immer schlechte Laune.
Das kann jeder für sich entscheiden, vielleicht fügt man einen Kommentar in das Skript ein, der auf die unterschiedlichen Möglichkeiten hinweist.
Dann benötigt man aber den Repeating-Linear-Gradient nicht und keine drei Wertangaben und auch keine Angabe zum Winkel, sondern es würde ein weiterer Linear-Gradient ausreichen (also ein vor den schon vorhandenen gesetzter). Allerdings hast Du natürlich insofern Recht, als es viiiel einfacher ist, nur den dritten Wert an den zweiten anzupassen.
Endor bevorzugt gestreift und ich verwende derzeit auch gestreift.
Me too. War meines Erachtens auch schon bei den Addons so.
Einfach die URL eines Themas oder Beitrags einfügen,
(etc.) Danke!
Du kannst jederzeit die manuelle Link-Funktion nutzen.
So, wie ich es schon die ganze Zeit mache … deswegen ja die Nachfrage.
Das funktioniert bei mir gar nicht im Nightly. Ich habe dann z-index entfernt und dann läuft es.
Hmpf, dabei habe ich das extra in einem neuen Profil getestet – allerdings nicht ohne Z-Index.
Übrigens, bei der letzten Farbangabe von repeating-linear-gradient entscheidet die Pixelangabe darüber, ob der Balken durchgehend farbig (6px) oder nicht durchgehend farbig (12px) erscheint.
Oh, das ist ein Fehler. Bei mir selbst ist dieser Faux-Pas nicht vorhanden (stand schon seit weiß-ich-nicht-mehr auf 12px, vielleicht hatte ich das mal für mich korrigiert), aber ich hatte das Skript hier von weiter oben kopiert. Die Pixelangaben im Repeating-Linear-Gradient hängen natürlich voneinander ab; man könnte zum Beispiel auch den dritten Wert auf 6px belassen und dafür den zweiten auf 3px setzen. Bei gleichen Werten ergibt diese Deklaration keinen Sinn.
Endor , ich habe das Skript in Beitrag 30 aktualisiert. Neben der anderen Pixelangabe und der Entfernung des Z-Indexes habe ich auch ein (bei mir) unnötiges !important entfernt.
Sören Hentzschel (oder jemand anderes): wie fügt man das eigentlich hier ein? Also außer durch direktes Eintippen. Ich habe bisher immer ausschließlich die Linkfunktion genutzt (und mag die Einblendungen auch nicht, aber evtl. gibt es zum Teil doch Vorteile).
Ich habe jetzt mal bei #urlbar-background in meinem CSS-Code left: 2em; z-index: -2 dazugefügt und die Prozessleiste funktioniert nun:
[…]
Die Werte für left und z-index sind willkürlich gewählt. Wichtig ist hier, dass der Wert von z-index negativ sein muss.
Wow! Da denke ich mir doch, warum nicht alles auf #urlbar-background anwenden? Und das sieht bei mir mit dem anderen Userstil sogar besser aus!
(Edit: Ein Fehler im CSS-Code repariert: 1x 6px → 12px, entsprechend folgender Postings Z-Index in #urlbar-background entfernt.)
/* LoadingBar.uc.js */
// Location Bar Enhancer5.1; Loading Bar0.3.0
(function(){
var cssStr = `
#urlbar-background {
background-image: repeating-linear-gradient(-45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,1) 6px, rgba(255,255,255,1) 12px), linear-gradient(to right, rgba(255,255,255) 0%, rgba(69,69,69) 100%);
background-size:0 0;
background-repeat:repeat-x, no-repeat;
transition: background-size 350ms ease 0s;
}
#urlbar-background:not([style="background-size: 0% 100%;"]) {
animation: progress-bar-stripes 2s linear infinite;
}
@keyframes progress-bar-stripes {
from {
background-position: 0 0;
}
to {
background-position: 51px 0;
}
}
`.replace(/\s{2,}|\r|\n/,"");
var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\"");
var mainW = document.getElementById("main-window");
document.insertBefore(style, mainW);
function main(window) {
var {document, gBrowser} = window;
function $(id) { return document.getElementById(id) };
var urlbar = $("urlbar-background");
let pageProgress = 0;
let async = makeWindowHelpers(window).async;
var LoadingBar = {
listener: {
onChangeTab: function(e) {
urlbar.style.backgroundSize = '0% 100%';
pageProgress = 0;
},
onProgressChange: function(aBrowser,webProgress,request,curSelfProgress,maxSelfProgress,curTotalProgress,maxTotalProgress) {
if (gBrowser.contentDocument === aBrowser.contentDocument) {
var val = (curTotalProgress-1)/(maxTotalProgress-1);
pageProgress = val;
urlbar.style.backgroundSize = (100*val) + '% 100%';
if (val > 0.9)
async(function() {
if (pageProgress > 0.95)
urlbar.style.backgroundSize = '100% 100%';
}, 1000);
}
},
onStateChange: function() {
if (pageProgress > 0.95){
async(function() {
urlbar.style.backgroundSize = '0% 100%';
pageProgress = 0;
}, 1000);
}else{
urlbar.style.backgroundSize = '0% 100%';
}
}
}
};
gBrowser.tabContainer.addEventListener('TabSelect',LoadingBar.listener.onChangeTab,false);
gBrowser.addTabsProgressListener(LoadingBar.listener);
unload(function() {
gBrowser.tabContainer.removeEventListener('TabSelect',LoadingBar.listener.onChangeTab,false);
gBrowser.removeTabsProgressListener(LoadingBar.listener);
}, window);
}
watchWindows(main, "navigator:browser");
function runOnLoad(window, callback, winType) {
window.addEventListener("load", function() {
window.removeEventListener("load", arguments.callee, false);
if (window.document.documentElement.getAttribute("windowtype") == winType)
callback(window);
}, false);
}
function runOnWindows(callback, winType) {
function watcher(window) {
try {
callback(window);
}
catch(ex) {}
}
let browserWindows = Services.wm.getEnumerator(winType);
while (browserWindows.hasMoreElements()) {
let browserWindow = browserWindows.getNext();
if (browserWindow.document.readyState == "complete")
watcher(browserWindow);
else
runOnLoad(browserWindow, watcher, winType);
}
}
function watchWindows(callback, winType) {
function watcher(window) {
try {
callback(window);
}
catch(ex) {}
}
runOnWindows(callback, winType);
function windowWatcher(subject, topic) {
if (topic == "domwindowopened")
runOnLoad(subject, watcher, winType);
}
Services.ww.registerNotification(windowWatcher);
unload(function() { Services.ww.unregisterNotification(windowWatcher) });
}
function unload(callback, container) {
let unloaders = unload.unloaders;
if (unloaders == null)
unloaders = unload.unloaders = [];
if (callback == null) {
unloaders.slice().forEach(function(unloader) { unloader() });
unloaders.length = 0;
return null;
}
if (container != null) {
container.addEventListener("unload", removeUnloader, false);
let origCallback = callback;
callback = function() {
container.removeEventListener("unload", removeUnloader, false);
origCallback();
}
}
function unloader() {
try {
callback();
}
catch(ex) {}
}
unloaders.push(unloader);
function removeUnloader() {
let index = unloaders.indexOf(unloader);
if (index != -1)
unloaders.splice(index, 1);
}
return removeUnloader;
}
function makeWindowHelpers(window) {
let {clearTimeout, setTimeout} = window;
function async(callback, delay) {
delay = delay || 0;
let timer = setTimeout(function() {
stopTimer();
callback();
}, delay);
function stopTimer() {
if (timer == null)
return;
clearTimeout(timer);
timer = null;
}
}
return {
async: async,
};
}
})();
Alles anzeigen
Endor , wenn es so läuft und Du das wieder übernimmst, erwähne auch und vor allem Milupo. Ich habe hier übrigens z-index: -1 gewählt. Und beachten: Ich habe nicht nur innerhalb des CSS-Bereichs etwas geändert, sondern auch in Zeile 33 32, damit das Skript überhaupt auf den Urlbar-Hintergrund angewandt wird. Das Skript habe ich wieder von weiter oben übertragen, kann also sein, dass die Farbangaben wieder geändert werden müssen.
O je, bei mir ist auch noch noch dieses aktiv: Adressleiste per CSS entsprechend Sicherheitsstatus einfärben.
Man findet darin diese Stilregel:
Endor ,
@laubenpieper oder milupo: Könnt ihr mal probeweise in das Skript im CSS-Bereich innerhalb desselben Urlbar-Selektors die beiden Deklarationen eintragen? Es geht hier, soweit ich mich erinnere, vor allem um den Z-Index.
Allerdings funktioniert das Skript so oder so nicht mehr exakt so wie früher.
Milupo, versteh ich das richtig, dass die Rundungen über den Userstil von dir selbst eingefügt sind, oder sind die demnächst Standard?
Vielen Dank für die Bearbeitung!
![]()
Habe es hochgeladen.
[…]
Gebe nun nochmals MIthrandir Bescheid.Erledigt
Freut mich alles!
Nachdem ich mich vor längerer Zeit mal damit beschäftigt hatte (vergleiche Posting vom 18. Juli 2019), hatte ich das Skript fast vergessen. Es lief einfach weiter und funktionierte. Ich benutzte die Version, wie sie Endor oben in Beitrag #2 präsentierte.
Nun fiel mir in Version 86 aber auf, dass es einen Fehler und eine Warnung verursachte (sicher schon länger), und ich hab es daraufhin leicht umgebaut (Änderungen nur in den Zeilen 5, 15, 17, 20 und 23 plus Kommentarzeile nach vorn verschoben):
/* LoadingBar.uc.js */
// Location Bar Enhancer5.1; Loading Bar0.3.0
(function(){
var cssStr = `
#urlbar {
background-image: repeating-linear-gradient(-45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,1) 6px, rgba(255,255,255,1) 6px), linear-gradient(to right, rgba(255,255,255) 0%, rgba(69,69,69) 100%);
background-size:0 0;
background-repeat:repeat-x, no-repeat;
transition: background-size 350ms ease 0s !important;
}
#urlbar:not([style="background-size: 0% 100%;"]) {
animation: progress-bar-stripes 2s linear infinite;
}
@keyframes progress-bar-stripes {
from {
background-position: 0 0;
}
to {
background-position: 51px 0;
}
}
`.replace(/\s{2,}|\r|\n/,"");
var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\"");
var mainW = document.getElementById("main-window");
document.insertBefore(style, mainW);
function main(window) {
var {document, gBrowser} = window;
function $(id) { return document.getElementById(id) };
var urlbar = $("urlbar");
let pageProgress = 0;
let async = makeWindowHelpers(window).async;
var LoadingBar = {
listener: {
onChangeTab: function(e) {
urlbar.style.backgroundSize = '0% 100%';
pageProgress = 0;
},
onProgressChange: function(aBrowser,webProgress,request,curSelfProgress,maxSelfProgress,curTotalProgress,maxTotalProgress) {
if (gBrowser.contentDocument === aBrowser.contentDocument) {
var val = (curTotalProgress-1)/(maxTotalProgress-1);
pageProgress = val;
urlbar.style.backgroundSize = (100*val) + '% 100%';
if (val > 0.9)
async(function() {
if (pageProgress > 0.95)
urlbar.style.backgroundSize = '100% 100%';
}, 1000);
}
},
onStateChange: function() {
if (pageProgress > 0.95){
async(function() {
urlbar.style.backgroundSize = '0% 100%';
pageProgress = 0;
}, 1000);
}else{
urlbar.style.backgroundSize = '0% 100%';
}
}
}
};
gBrowser.tabContainer.addEventListener('TabSelect',LoadingBar.listener.onChangeTab,false);
gBrowser.addTabsProgressListener(LoadingBar.listener);
unload(function() {
gBrowser.tabContainer.removeEventListener('TabSelect',LoadingBar.listener.onChangeTab,false);
gBrowser.removeTabsProgressListener(LoadingBar.listener);
}, window);
}
watchWindows(main, "navigator:browser");
function runOnLoad(window, callback, winType) {
window.addEventListener("load", function() {
window.removeEventListener("load", arguments.callee, false);
if (window.document.documentElement.getAttribute("windowtype") == winType)
callback(window);
}, false);
}
function runOnWindows(callback, winType) {
function watcher(window) {
try {
callback(window);
}
catch(ex) {}
}
let browserWindows = Services.wm.getEnumerator(winType);
while (browserWindows.hasMoreElements()) {
let browserWindow = browserWindows.getNext();
if (browserWindow.document.readyState == "complete")
watcher(browserWindow);
else
runOnLoad(browserWindow, watcher, winType);
}
}
function watchWindows(callback, winType) {
function watcher(window) {
try {
callback(window);
}
catch(ex) {}
}
runOnWindows(callback, winType);
function windowWatcher(subject, topic) {
if (topic == "domwindowopened")
runOnLoad(subject, watcher, winType);
}
Services.ww.registerNotification(windowWatcher);
unload(function() { Services.ww.unregisterNotification(windowWatcher) });
}
function unload(callback, container) {
let unloaders = unload.unloaders;
if (unloaders == null)
unloaders = unload.unloaders = [];
if (callback == null) {
unloaders.slice().forEach(function(unloader) { unloader() });
unloaders.length = 0;
return null;
}
if (container != null) {
container.addEventListener("unload", removeUnloader, false);
let origCallback = callback;
callback = function() {
container.removeEventListener("unload", removeUnloader, false);
origCallback();
}
}
function unloader() {
try {
callback();
}
catch(ex) {}
}
unloaders.push(unloader);
function removeUnloader() {
let index = unloaders.indexOf(unloader);
if (index != -1)
unloaders.splice(index, 1);
}
return removeUnloader;
}
function makeWindowHelpers(window) {
let {clearTimeout, setTimeout} = window;
function async(callback, delay) {
delay = delay || 0;
let timer = setTimeout(function() {
stopTimer();
callback();
}, delay);
function stopTimer() {
if (timer == null)
return;
clearTimeout(timer);
timer = null;
}
}
return {
async: async,
};
}
})();
Alles anzeigen
Endor, willst Du das bei dir auf der Github-Ressource veröffentlichen? Mithrandir scheint ja leider völlig inaktiv zu sein.
Weder JPEG noch PNG sind das pauschal bessere oder schlechtere Bildformat und SVG als Vektorgrafikformat ist sowieso eine ganz andere Baustelle. JPEG zu verwenden ist jedenfalls definitiv kein Fehler, auch in der Verwendung für das Web nicht. Es kommt immer drauf an.
jahrud präsentiert Grafiken auf der Website. Ich bezog mich bei meiner Antwort auf diese Äußerungen in der Wikipedia (und inhaltlich gleich bei Wikimedia Commons), nach denen dort seit Jahren vorgegangen wird:
Verwende
Wie dort auch zu lesen ist, sind die Kompressionsartefakte bei JPEG unter Umständen ein Problem und genau die können erheblich dazu beitragen, dass Schrift unscharf dargestellt wird.
Das Größen-Handling ist bei keinem Web-kompatiblen Format so kompliziert wie bei SVG.
Eben weil SVG ein Vektorformat ist, dachte ich, man müsse weniger Größenvorgaben machen, deshalb meine Äußerung, aber OK – und wenn es in Wordpress nicht erlaubt ist, hier im konkreten Fall auch nicht relevant.
WebP bedeutet keinesfalls, Benutzer älterer Browser auszuschließen, da man problemlos mehrere Bildformate angeben kann.
Aha, stimmt. Was ich meinte, kann man unter Can I use... WebP image format nachsehen.
Gibte es keine Lösung für dieses Problem?
Den Webseiten-Betreiber auf das Problem aufmerksam machen.
Auf meiner Website werden speziell Grafikdateien sehr unscharf dargestellt.
Ach, das bist Du selbst.
Ein Fehler, den ich sehe: Du solltest Grafiken nicht als JPEG darstellen, Nimm am allerbesten SVG, dann müsstest Du auch die ganzen Größenjonglagen nicht einbauen, oder wenigstens PNG (ich vermute, du konvertierst sie sowieso mit einem PHP-Modul, oder?). .DeJaVu schreibt von WEBP, was bei modernen Browsern oft bessere Ergebnisse trotz Komprimierung erzeugt (war ja auch ein Beweggrund der Entwicklung), ich erkenne aber nicht, wie er hier darauf kommt. Und man schließt Benutzer älterer Browser aus.
Eventuell ist es auch abhängig von den benutzen Schriften, aber das ist nur eine Vermutung ins Blaue hinein.
Wenn ich die Grafiken z.B. unter Chrome aufrufe, werden die ordnungsgmäß angezeigt.
Ich hab kein Chrome, aber SRWare Iron (Link zum Wikipedia-Artikel), und sehe keinen Unterschied. Soll heißen: In beiden Browsern ist die Darstellung der Schrift leicht unscharf; es handelt sich hier also sehr wahrscheinlich um kein Firefox-Problem.
Lösung: Im Quelltext der Seite steht die Zeile
<link rel="icon" type="image/png" href="/data/styles/2/styles/LexwareTheme/favicons/favicon.ico" sizes="32x32" />
(ist doch gar kein PNG!). Wenn ich jetzt https://forum.lexware.de/data/styles/2/…ons/favicon.ico aufrufe, wird mir das Bild mit dem weißen L auf rotem Grund angezeigt (ich sehe gerade, dass Andreas es oben ebenfalls abruft), aber nur in Größe 16x16px, das Favicon im Tab ist jedoch auch hier das andere, das metromax für das falsche hält, denn:
Seit Urzeiten des Favicon-Mechanismus fragen die Browser auch nach einem Favicon direkt unterhalb der Domain, hier also nach https://forum.lexware.de/favicon.ico, und dieser Aufruf liefert dieses andere Bild – und das ist mit 48x48px größer!