Greasemonkey: Fügen Sie eine GM.addStyle-API hinzu, um CSP-restriktive Seiten zu gestalten

Erstellt am 22. Nov. 2017  ·  14Kommentare  ·  Quelle: greasemonkey/greasemonkey

der derzeitige Mangel an Scripting-Stil ist eigentlich eine komplette Katastrophe :-(

Hilfreichster Kommentar

Vielen Dank !

Das macht den aktuellen Mangel aber noch unverständlicher...

Alle 14 Kommentare

addStyle besteht aus nur 12 trivialen Codezeilen , die Sie einfach in Ihr Skript kopieren können. Oder sogar 11, weil diese Zeile nicht benötigt wird:
style.setAttribute('type', 'text/css');

Vielen Dank !

Das macht den aktuellen Mangel aber noch unverständlicher...

@arantius Ich habe ein Problem beim Versuch, Benutzerstile auf Seiten zu laden, die CSP haben und "self" als Ursprung nicht zulassen - also kann ich nicht einfach ein <style> Element hinzufügen. GM könnte dies lösen, indem eine API verfügbar gemacht wird, die tabs.insertCSS() ( ref ) aufruft. Die Gedanken?

Ich habe ein Problem beim Versuch, Benutzerstile auf Seiten zu laden, die CSP haben und "self" als Ursprung nicht zulassen. Ich kann also nicht einfach ein hinzufügen

Ich habe einen Fehler gegen Stylish eingereicht, da ich dort auf das Problem gestoßen bin. Dennoch dachte ich, es wäre eine Überlegung wert, hier in Betracht gezogen zu werden, da die aktuellen APIs von GM meistens privilegierte WebExt-APIs bereitstellen, die einige Inhaltsskriptbeschränkungen umgehen, und insertCSS ist eine weitere davon.

Habe den Fehler gefunden, auf den sich @Sxderp bezieht (auch diesen ). Wenn diese landen, werden meine Vorschläge hier und auf Stylish überflüssig sein.

Ich weiß nicht genau, was "Dies sollte funktionieren, wenn Sie das CSS in Ihrer Erweiterung bündeln ..." im verlinkten Fehler bedeutet. Das dynamische Einfügen von Knoten funktioniert möglicherweise nicht.

Ich werde wieder öffnen, um die CSP-sichere Funktionalität zu prüfen. (Aber mit sehr niedriger Priorität...)

Prinzipiell könnte dies auch ohne Warten auf FF implementiert werden, indem eine Nachricht an das Hintergrundskript übergeben und tabs.insertCSS ausgeführt wird . Aber das Springen durch diese Reifen ist nicht notwendig, sobald dieser Fehler implementiert ist.

@arantius 1415352 sagt "Dies sollte sowohl für HTML style Attribute als auch für den Inhalt von HTML- <style> Knoten gelten."

Falls nicht geplant ist, ein GM.addStyle hinzuzufügen (was für mich sehr in Ordnung ist, wenn das CSP-Problem anders behandelt wird), schlage ich vor, diesen Blogbeitrag zu ändern, um klarzustellen, dass nicht nur „Ab heute gibt es“ keine Unterstützung für […] GM_addStyle“, die aber auch in Zukunft nicht geplant ist (und vielleicht auch auf diese Alternative hinweisen). Das mag offensichtlich erscheinen, war aber nichts für mich (hätte ich dieses Problem nicht gefunden, würde ich vielleicht darauf warten, dass die Funktion neu implementiert wird, anstatt meine Skripte jetzt zu reparieren).

Vielen Dank!

Zum Polyfill: Seit ich gehört habe, dass GM_addStyle auf dem Hackblock ist, habe ich eigentlich nur 3 Befehle verwendet, um es zu ersetzen. Anstatt auf HEAD zu testen, füge ich den STYLE einfach direkt zum documentElement hinzu, das immer vorhanden ist, sogar beim Dokumentstart.

var style = document.createElement('style'); var style.textContent = `
<Stylesheet here>
`; document.documentElement.appendChild(style);

Hier ist die Funktionsversion, die ich seltener verwende, die bei 5 Zeilen eintaktet:

addStyle = function (css) {
  var style = document.createElement('style');
  style.textContent = css;
  document.documentElement.appendChild(style);
  return style; //optional, but convenient for changing the styling later.
};

Ich habe dies in GM 3 und 4 auf Firefox und TamperMonkey auf Chrome ohne Probleme getestet, obwohl es nicht Standard ist. Und ich ziehe es vor, dass es nicht standardmäßig fehlschlägt, wenn der HEAD noch nicht geladen wurde (was überraschend oft passiert. Ich hatte Beschwerden.)

Ich stelle auch fest, dass UserStyles,org meine Methode als Fallback in seinen automatisch generierten Benutzerskripten verwendet.

Anstatt auf HEAD zu testen, füge ich den STYLE einfach direkt zum documentElement hinzu, das immer vorhanden ist, sogar beim Dokumentstart.

In FF57 und GM4 ist documentElement nicht immer beim Dokumentenstart verfügbar, zumindest auf meinem Rechner.

Da bei GM 4 (vorerst) der Dokumentenstart noch später als zuvor erfolgt, bin ich
nicht sicher, wie das möglich ist. Aber wenn das documentElement nicht vorhanden ist,
dann wird keiner das HEAD-Element sein, da das documentElement das
HTML-Element. welches das HEAD-Element enthält. Also meine Methode ist nicht
noch schlimmer.

Ich gebe zu, dass ich den neuesten Entwickler auf Fx 59 nicht getestet habe, der einen anderen verwendet
-Methode, um document-start zu erhalten, aber ich hoffe, dass das documentElement vorhanden ist. Wenn
nicht, dann werden alle Arten von Skripten kaputt gehen. Du kannst nichts mit dem machen
document bevor es ein documentElement gibt. Ich glaube nicht einmal, dass du einstellen kannst
Mutationsbeobachter auf.

Ich würde definitiv erwarten, dass das Dokumentelement zu dem Zeitpunkt vorhanden ist, wenn
Jedes Inhaltsskript wird eingefügt.

Am Dienstag, 26. Dezember 2017 um 18:26 Uhr schrieb CoolCmd [email protected] :

Anstatt auf HEAD zu testen, füge ich den STYLE einfach direkt zum
documentElement, das immer vorhanden ist, auch beim Dokumentstart.
In FF57 und GM4 ist documentElement nicht immer verfügbar unter
document-start, zumindest auf meinem Rechner.


Sie erhalten dies, weil Sie einen Kommentar abgegeben haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/greasemonkey/greasemonkey/issues/2724#issuecomment-354028964 ,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/AFNSrmb5eKj-nY9vnR3d94bq5kIjaz9Tks5tEY7PgaJpZM4QnG03
.

Ich glaube nicht einmal, dass man Mutationsbeobachter einrichten kann.

Sie können einen Mutationsbeobachter an document anhängen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen