JQuery Ajax Request in AdobeAir Browser-Control
Ich schrie heute ein paar Stunden auf einen Bildschirm ein, in dem eine Adobe Air Anwendung lief, die ihrerseits eine Webseite von mir darstellte. Nur leider wollte diese Webseite nicht so wie ich wohl wollte – zumindest nicht innerhalb des Adobe Air Browsers. Außerhalb lief die kleine Ajax-Login Methode auf jedem Browser dem ich sie zum Rendering vorwarf. Sicherheit und Manipulierbarkeit dieser Demo mal völlig außen vor gelassen, wollte ich Daten via JQuery Ajax an ein Skript schicken und bei Erfolg eine Aktion durchführen. Leider blieb das Skript irgendwo hängen. Ohne Fehlermeldungen, ohne die Möglichkeit Adobe Air zu debuggen usw.
Nun bin ich heiser, habe aber den Übeltäter gefunden. Die kleine Zeile console.log(data)
, mit der ich während der Entwicklung die Rückgabewerte überprüfte, funktioniert zwar in jedem Browser, innerhalb Adobe Air jedoch nicht.
<script type="text/javascript"> $("#loginFormSubmit").click(function(){ $.post( "login.php", {username: $("#loginFormUser").val(), password: $("#loginFormPassword").val()}, function(data){ console.log(data); if(data.success == true) { [...] } else { [...] } }, "json" ); }); </script>
Das ist natürlich richtig, denn console.log()
ist eine Funktion, die von Firebug dem Browser hinzugefügt wird, bzw. bei einigen bereits mitgeliefert ist und somit manchmal nicht existiert und folglich einen Fehler werfen müsste. Warum klappt es dann aber in anderen Browsern wie Safari, Chrome oder Internet Explorer, in denen ich garantiert kein Firebug installiert hatte ohne zu murren? (siehe Kommentar von Sven) Um den Fehler in Zukunft zu umgehen definiere ich einen Workaround:
if(!console || !console.log) { console = {}; console.log = function(txt) { throw new Error(txt) }; }
Done – wo sind die Valium?
> Warum klappt es dann aber in anderen Browsern wie Safari, Chrome oder Internet Explorer
Weil die meisten Browser mittlerweile ein console Obejekt bereitstellen 😉
http://www.opera.com/dragonfly/documentation/console/
https://developers.google.com/chrome-developer-tools/docs/console
http://msdn.microsoft.com/en-us/library/ie/gg589530(v=vs.85).aspx
usw.
mfg Sven
Touché:-)