5 / 95
Worum geht's?
• 2 Folien Einführung
• Drei alte bekannte Gegenmaßnahmen
• Neue innovative Gegenmaßnahmen
6 / 95
Idee #1
Layout-Fehler vermeiden,
indem man immer
valides HTML ausliefert.
7 / 95
Wie?
• Browser Extension
– Funktioniert nur in einem Browser
– Läßt den CI-Build nicht fehlschlagen
8 / 95
Wie?
• Automatische Validierung
als Bestandteil des CI-Builds
– Option 1: Ein separater Test, der die
entscheidenen Seiten Ihrer Website
überprüft.
– Option2: Innerhalb bereits existierender
Frontend-Tests
14 / 95
Schnelleres Feedback möglich!
• Mit einem javax.servlet.Filter
– Voraussetzung: HTML-Entwickler
benutzt Tomcat oder Jetty
– Funktioniert in allen Browsern
21 / 95
Ads
• Müssen Sie invalides HTML von externen
Quellen in Ihre Seiten einbinden?
• Option 1: Fügen Sie einen Switch zum
Ausschalten aller Ads zu Ihrer Web-
applikation hinzu.
• Option 2: Erweitern Sie den
W3CMarkupValidationFilter so, dass er
vor der Validierung alle Ads entfernt.
27 / 95
Idee #3
Layout-Fehler vermeiden,
indem man auf gültige
Bild-URLs überprüft.
28 / 95
http://fighting-layout-bugs.googlecode.com
DetectInvalidImageUrls
• Überprüft HTML auf sichtbare
<img>- Elemente ohne oder mit
ungültigen src-Attribut
• Überprüft CSS (style-Attribute,
<style>-Elemente, eingebundene
Stylesheets) auf ungültige Bild-URLs
• Überprüft die URL für das Favicon
47 / 95
http://fighting-layout-bugs.googlecode.com
SimpleTextDetector
• jQuery wird in die zu analysierende Seite injected
• jQuery('*').css('color', '#000000');
• ein Screenshot wird erstellt
• jQuery('*').css('color', '#fffff');
• es wird ein zweiter Screenshot erstellt
• Vergleich beider Screenshots:
unterschiedliche Pixel sind Textpixel
52 / 95
http://fighting-layout-bugs.googlecode.com
SimpleEdgeDetector
• jQuery wird in die zu analysierende Seite injected
• jQuery('*').css('color', 'transparent');
• ein Screenshot wird erstellt
• Bestimmen der Kandidaten für vertikale / horizontale
Kanten: alle Pixelpaare mit hohem Kontrast
• Bestimmen der vertikale / horizontale Kanten:
alle vertikalen / horizontalen Sequenzen in den
gefundenen Kandidaten mit ähnlicher Farbe und
einer gewissen Mindestlänge
59 / 95
http://fighting-layout-bugs.googlecode.com
DetectTextWithTooLowContrast
• Textpixel identifizieren (wie bereits gesehen)
• Überprüfen, ob Kontrast zwischen Textpixeln
und Hintergrundpixeln groß genug ist
62 / 95
Integration in den
Entwicklungsprozess
• Nigthly Build
• Option 1: separater Frontend-Test,
der verschiedene wohldefinierte
Seiten untersucht
• Option 2: An ausgewählten Punkten
in bereits bestehenden Frontend-Tests
63 / 95
Fehlerhafte Texterkennung
durch Animation auf der
zu analysierenden Seite ...