Path: csiph.com!news.mixmin.net!eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Andreas Borutta Newsgroups: de.comp.lang.javascript Subject: Re: Bestimmte Unicodezeichen in HTML finden und "behandeln" Date: Mon, 29 May 2023 19:48:27 +0200 Organization: A noiseless patient Spider Lines: 116 Message-ID: <11sawgiw92age.dlg@borumat.de> References: <15w1w7buq1bbf$.dlg@borumat.de> <14jvgfoghdlhe$.dlg@borumat.de> <10ete9dqz19k2$.dlg@borumat.de> <1u61d8n45af7h$.dlg@borumat.de> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Injection-Info: dont-email.me; posting-host="0e220807a1f09f34a38e1ee0981861eb"; logging-data="1646993"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+YOfzJznuqPd04RfUwOTQmU2eF20AYv1w=" User-Agent: 40tude_Dialog/2.0.15.41de (00b78c87.222.305) Cancel-Lock: sha1:jtYMBxsydXyWhb+Gz02UfEU5PA4= Xref: csiph.com de.comp.lang.javascript:5384 Stefan Ram: >>Hier verstehe ich etwas konzeptionell noch nicht. >>Mir ist jetzt erst aufgefallen, dass ich HTL-Elemente explizit >>hinzufügen muss, die behandelt werden sollen. >>Sozusagen Opt-In. >>Wäre es vor diesem Hintergrund nicht sinnvoll und praktisch, wenn >>automatisch alle HTML5-Elemente vom Skript behandelt werden? >>Denn das ist ja der typische Usecase. > [...] > Du kannst durch "const ok = true;" an Stelle von 'const ok = > parent.nodeName in{ "P":0, "H1":0 /* ... */ }' (die Zeile > sollte eigentlich ohnehin auch mit einem Semikolon ";" enden) > erreichen, daß wirklich /alle/ Elemente, die nicht unter einem > Element mit ausgeschlossenem Typ liegen, modifiziert werden. > Aber das könnte, wie gesagt, zu Problemen führen (siehe unten). Ich habe das eingepflegt. Tests mit komplexeren Dokumenten (mit verschachtelten Elementen) stehen eh noch aus. Ich werde berichten. Grundsätzlich ist natürlich eine hohe Zuverlässigkeit des Skriptes wichtig. Und bei einem White-Listing wäre es nur eine Frage der Zeit, wann man mal auf einer Website ein HTML-Element neu hinzunimmt und vergisst, es im Skript zu ergänzen. Das Argument erwähnst Du selber ja weiter unten ebenfalls. >>Auch alle HTML-Custom-Elemente, die mit einem spezifischen Präfix mit >>Minus dahinter im Elementnamen eingeleitet werden, sollten automatisch >>vom Skript behandelt werden. > > Du könntest ganz am Anfang des Skriptes folgende Deklaration einfügen: > > const prefix = "x-"; > > . Dadurch ist nun ein Präfix für Elemente festgelegt, die auf jeden > Fall bearbeitet werden sollen. > > Der Anfang der Funktion "processNode" über der Zeile "if( ok )" könnte > dann so aussehen: > > function processNode( node ) > { if( node.nodeType == Node.TEXT_NODE ) > { const parent = node.parentElement; > const ok1 = parent.nodeName.toLowerCase().startsWith( prefix ); > const ok2 = parent.nodeName.toLowerCase() in > { "p":0, "h1":0 /* ... */ }; > let ok3 = true; > for( pairs_unicode_custom_element of pairs_unicode_custom_elements ) > { if > ( parent.nodeName.toLowerCase() == > pairs_unicode_custom_element[ 1 ]) > ok3 = false; } > const ok =( ok1 || ok2 )&& ok3; > > /* Hinweis: Nicht vergessen, obiges "ok2" je nach > Bedarf um die Typen weiterer Elemente zu erweitern, > in denen Ersetzungen stattfinden sollen! */ Das habe ich jetzt so eingepflegt. Aber ich habe Sorge bei den diversen Änderungen doch Fehler einzubauen. Bist Du bitte nochmal so nett und führst folgende Änderungen am Skript durch: 1 Entfernung der Skriptteile für Whitelisting 2 Ergänzung der Blacklist mit "head" 3 Entfernung der Skriptteile, wo man CSS-Regeln angeben kann