Grundprinzip ist folgendermaßen:
Im Frontend laeuft eine Javascript/XHR/PHP Anwendung.
Der Benutzer gibt Parameter ein, diese werden via XHR an das Backend gesendet und dort in der PHP-Session aufbewahrt.
Es kann auch ein Zip-Archiv hochgeladen werden, dieses wird in einem temorären Arbeitsverzeichnis entpackt und der Verweis auf dieses Verzeichnis ebenfalls in der Session festgehalten.
Startet der Benutzer den Prüfvorgang geschieht folgendes:
- Es wird eine temporäre HTML-Seite im Arbeitsverzeichnis erzeugt, welche die zu testenden Eingaben enthält.
- Die Testseite beinhaltet auch das Javascript um das IAB_HOST_LOADED Signal an alle Werbemittel zu senden
- Die index.html eines Werbemittel-Uploads wird als Friendly-Iframe angesteuert
- Alternativ wird für ein eingegebenes Werbemittel eine Datei erzeugt und diese ebenso als Iframe aufgerufen.
- Das Iframe kann entweder "friendly" (same domain) oder "unfriendly" (andere domain) eingebunden werden
- Weitere Assets werden als Script, Styles, Image direkt in die Testseite geschrieben.
- Es wird dann ein Chrome-Browser gestartet und über den Debug-Kanal ferngesteuert
- Dazu wird ein Javascript auf dem Server (mittels node) ausgeführt, welches mit dem CRI (Chrome Remote Interface) eine Verbindung zu dem Browser aufnimmt.
- Der Browser wird auf die Testseite gelenkt
- Jede Anfrage die von der Testseite ausgeht wird detailiert protokolliert
- Es wird ein Ergebnis-Objekt an das PHP-Backend übergeben
- Die Ergebnisse werde ausgewertet (zB Vendoren auflösen) und an das Frontend übergeben
Im Chrome-Remote-Interface kann nur das Dom-Ready und das Load-Event gemessen werden. Die Werbemittel reagieren jedoch auf das ReadyStateChange "complete" Event
In der Testseite wird ReadyStateChange "complete" UND Load-Event gemessen. Das Delta in Mikrosekunden wird vom außen gemessenen Load-Event abgezogen.
So ist es möglich zu erkennen, ob Werbemittel in Friendly-Iframes tatsächlich erst mit dem Sub-Load Teil beginnen, wenn sie es auch dürfen.
Das Frontend ist jederzeit in der Lage ein Ergebnis-Objekt auszuwerten und grafisch aufzubereiten:
- Es werden 5 Tacho-Diagramme gezeichnet
- Es wird ein Aufruf-Liste mit Anmerkungen erstellt
- Es wird ein detailliertes Zeit/Aufruf Diagramm ("Profiling") gezeichnet
- Fehler, Probleme und Schwellwertüberschreitungen werden ebenfalls ausgewiesen
Der Benutzer kann nun einen PDF-Export veranlassen:
- Ein PHP-Backendprozess wird aufgerufen
- Der Prozess hat Zugriff auf das letzte Ergebnis
- Das Frontend-HTML wird geladen, das Ergebnis wird injiziert und das Ergebnis im temporären Arbeitsverzeichnis gespeichert
- Nun wird ein Chrome-Prozess mit PDF Speicherung auf die temporäre Seite gelenkt
- Die dabei entstehende Datei wird an den Benutzer ausgeliefert
Die Funktion "Alle zurücksetzen" löscht das letzte Ergebnis, die Eingabe und auch die Arbeitsverzeichnisse.
- php 7.2.19 bzw. PHP 7.3.8-1
- ext-json (php Erweiterung)
- ext-zip (php Erweiterung)
- Chromium 75.0.3770.100 bzw. Chromium 76.0.3809.100
- node v8.10.0 bzw. v10.15.2
Nur zur Installation:
- npm 3.5.2 bzw. 5.8.0
Beispielweise:
und dazugehörig
https://unfriendly.ovk-advalidator.de
- Repository clonen/exportieren
- Schreibzugriff auf /path/to/public/workdir, /path/to/var/* ermöglichen
- npm install
- gulp sass && gulp scripts && gulp fonts
- Vhost zeigt auf /path/to/public
- /index.html als Standard-Seite im Vhost
Unter /usr/bin/chromium wird ein browser erwartet.
-
Wird beim Messvorgang gestartet.
-
Wird zur PDF Generierung benutzt.
Unter /usr/bin/node wird ein Node erwartet, hiermit wird der laufende Chrome-Browser angesteuert.
Das Frontend basiert auf
https://foundation.zurb.com/sites/docs/index.html
Das Frontend Javascript benutzt jquery
Für die Charts wird
benutzt
[/site]$ npm install
[/site]$ gulp sass
[/site]$ gulp scripts
[/site]$ gulp fonts
Reines PHP (7.2) mit composer-Autoloader
Reap old workdir files using:
find /path/to/public/workdir -type d -mmin +1800 -exec rm -rf {} +