Javascript alert() blokkeren zonder rechten op bron

Oh god, die lelijke popup schermpjes bovenaan je browser die je vaak over het hoofd ziet, maar wel de boel stoppen totdat je op ok klikt. Wat doen we eraan?

Javascript alert() blokkeren zonder rechten op bron

In mijn dagelijks werk maak ik gebruik van oplossingen door derde partijen, en dat brengt bepaalde afhankelijkheden met zich mee.

De situatie

Wij maken gebruik van formulieren welke door een 3e partij worden gegenereerd. Het formulier wordt op basis van een xml bestand geïnitialiseerd (waar ik geen toegang tot heb), en met xslt tot bruikbare HTML verwerkt.

Het verwerken van het formulier wordt dan ook door hen afgevangen met een javascript wat ze in het formulier injecteren, en waar ik ook geen toegang tot heb. Dit stukje script verwerkt bij verzending de inhoud van het formulier tot bruikbare data en verzend het dan naar hun database.

In dit stukje script worden formuliervelden met ongeldige waarden via een alert aan de gebruiker kenbaar gemaakt.

Irritante alert(message); van script 3e partij

Waarom wilde ik de alert voorkomen?

Tegenwoordig verwacht ik bij een formulier dat er geen alert naar voren komt wanneer ik iets ben vergeten in te vullen. Zo'n irritante popup met wat meldingen...

Dat werkt gewoon niet lekker. Dan moet ik onthouden wat er staat en zelf op het formulier (zeker bij een groter formulier met veel invulvelden nogal irritant) gaan zoeken naar de plek waar ik iets ben vergeten of fout heb gedaan...

Ik wil gewoon met kleur in het formulier zien dat iets niet klopt en daar direct mee aan de slag. Een tekstboodschap en de focus naar het veld in kwestie is gewoon logisch en handiger.

Achteraf gezien grappig dat ik eerst de hele DOM structuur heb aangepakt met javascript, om de functies van het script van de 3e partij te omzeilen. Ik was de bron van het probleem aan het aanpakken, ofwel voorkomen dat de alert werd aangeroepen. Normaliter een goede aanpak, maar hier bleek ik aan symptoombestrijding te moeten gaan doen...

Hoe is het dan toch gelukt?

Zoals net al min of meer gezegd, eigenlijk is het altijd simpeler dan je op een gegeven moment bedenkt...

    <script>    
    window.alert = function(){};
    </script>

Ja, het is een beetje een grove oplossing, want ik blokkeer hiermee alle alert calls voor deze pagina. Maar op deze pagina gebruik ik geen alerts, en liever sowieso niet. Daarnaast draait het formulier in een iframe, en blijft hiermee de blokkade van alerts tot alleen de iframe beperkt.

Soms is het zo simpel... :)