Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Kein Inline-JavaScript

Designs ohne Inline-Skriptcode schreiben: keine script-Blöcke mit Code, keine on*-Handler-Attribute, keine javascript:-Links; Event-Delegation mit data-Attributen, JSON-Konfigurationsblöcke, progressive Verbesserung und…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/designers/theme-design/no-inline-javascript.md

On this page

This page is a translation. Read the English original

Kein Inline-JavaScript

Diese Seite ist für Designer und Frontend-Entwickler. Templates von Exponential-Designs tragen keinen Skriptcode: Jede Zeile JavaScript steht in einer Datei unter javascript/, geladen über ezjscore. Die Seite zeigt die Muster, die Inline-Code ersetzen.

Inhalt

  1. Was als inline gilt
  2. Handler: data-Attribute und Delegation
  3. Werte für Skripte: JSON-Blöcke
  4. Progressive Verbesserung
  5. Prüfen

Was als inline gilt

Dieselben drei Arten, die die Designtests zählen (AdminContentSecurityPolicyTest, ExtensionInlineScriptsTest):

  • ein <script>-Element mit Code darin (ein <script src="...">, ein JSON-Datenblock und ein <template> sind in Ordnung);
  • ein Event-Handler-Attribut: onclick="", onchange="", onload="" ...;
  • eine javascript:-URL.

Alle drei werden von einer Richtlinie mit script-src 'self' blockiert.

Handler: data-Attribute und Delegation

Das Markup sagt, was; die Skriptdatei sagt, wie:

<button type="button" class="js-toggle" data-target="site-nav" aria-expanded="false" aria-controls="site-nav">
    {'Menu'|i18n( 'design/mytheme' )}
</button>
<nav id="site-nav" hidden>...</nav>
/* design/mytheme/javascript/mytheme.js */
document.addEventListener('click', function (event) {
  var button = event.target.closest('.js-toggle');
  if (!button) return;
  var target = document.getElementById(button.dataset.target);
  var open = button.getAttribute('aria-expanded') === 'true';
  button.setAttribute('aria-expanded', String(!open));
  target.hidden = open;
});

Ein Listener am Dokument behandelt jeden Umschalter, auch solche, die später per AJAX hinzukommen. Die Administration verwendet dieselbe Idee mit data-a4-*-Aktionen (die CSP-Seite führt sie als Ersatz für Handler auf).

Werte für Skripte: JSON-Blöcke

<script type="application/json" id="mytheme-map">{json_encode( hash(
    'lat', $node.data_map.location.content.latitude,
    'lng', $node.data_map.location.content.longitude,
    'label', $node.name ) )}</script>
var data = JSON.parse(document.getElementById('mytheme-map').textContent);

json_encode (ezjscore) maskiert die Werte für JSON. Ein JSON-Block ist Daten, kein Code, und wird nicht blockiert.

Progressive Verbesserung

Bauen Sie Seiten, die ohne das Skript funktionieren, und fügen Sie dann Verhalten hinzu:

  • ein Menü, das eine einfache Liste von Links ist; das Skript macht daraus einen Umschalter;
  • ein Formular, das normal absendet; das Skript fügt Live-Validierung oder AJAX hinzu;
  • <details> für Aufklappbereiche, <dialog> für Dialoge.

Das Kopf-Skript von admin4 setzt die Klasse a4-js am <html>, wenn Skripte laufen, sodass Stylesheets den geskripteten Zustand erst dann zeichnen. Machen Sie es in Ihrem Design genauso (setzen Sie eine Klasse aus Ihrer Kopf-Skriptdatei).

Prüfen

grep -rn -E "on(click|change|load|submit|keyup|keydown|mouseover)=|javascript:|<script>" extension/mytheme/design --include=*.tpl

und sehen Sie sich die Konsole des Browsers auf jedem Seitentyp an, mit der Richtlinie der Website im Modus report-only.

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x