Named access on the Window object in Safari

downloadThis week we noticed that the user administration of our time tracking app timr behaved different on Safari.

I debugged into that issue and found out that a condition in JavaScript behaved different than in other browsers:

[code language=”javascript”]if (assignedGroupTable) …[/code]

The variable assignedGroupTable was defined some lines before with

[code language=”javascript”]var assignedGroupTable;[/code]

and the condition should be false on the first call of that function, but in Safari it was true. The debugger showed that the value of assignedGroupTable seemed to be a DIV – there was a DIV in the page with an ID assignedGroupTable, but it had never been assigned to that variable. It seemed like Safari automatically assigned the DIV, with the ID, that was equal to the variable name, to the variable.

After a quick search, I came to this article about DOM Element References as Global Variables and I was really surprised, about what I read there. It seems like all modern browser implement the Named access on the Window object, which allows you to access elements via the ID or NAME attribute, simply by using it like a variable in JavaScript.

So why did our code behave different in Safari? I adapted the example the article uses to find the difference in the behaviour of Safari.

On modern browsers (Chrome 29, Safari 6, Firefox 22, IE 10) this logs the button element to the console. But when making a small change the browsers behave different:

In Chrome, Firefox and IE this logs undefined to the console, only Safari still logs the button element!

There were two ways to fix our problem:

  1. rename the ID of the DIV or the variable so that they differ
  2. define the variable in the JavaScript with
    [code language=”javascript”]var assignedGroupTable = null;[/code] setting the value explicitly to null

Wo decided to do the second because it required fewer changes.

Erstes Treffen der Softwerkskammer Linz

Letzten Mittwoch fand in Linz das erste Treffen der Softwerkskammer Linz im Daxbau statt. Die Softwarkskammer ist:

… ein Zusammenschluss von Communities of Professionals, die über den ganzen deutschsprachigen Raum verteilt sind. Uns geht es darum, gute Software zu entwickeln, und zwar im Hinblick auf alle Aspekte.

Wir möchten

  • voneinander lernen und Erfahrungen austauschen
  • die Software erstellen, die der Kunde wirklich braucht
  • sicherstellen, dass unsere Ergebnisse eine hohe interne und externe Qualität besitzen
  • flexible, leicht änderbare Software herstellen

Kurz: Wir wollen die richtige Software entwickeln, und wir wollen die Software richtig entwickeln.

Grundsätzlich wird bei den Treffen praktisch gearbeitet werden, also keine Frontalvorträge gemacht. Beispiel für solche Aktivitäten der Softwerkskammer:

Hört sich interessant an, weil mir die Aussicht gefällt, mal gemeinsam mit einem Entwickler, aus einem ganz anderen Umfeld (Firma, Programmiersprache, …), eine Aufgabe zu lösen und neue Sichtweisen zu bekommen.

Ich habe ja schon mal gebloggt (siehe hier und hier) dass ich es ziemlich cool finde welche Gruppen und Events sich in den letzten Monaten in Linz ergeben haben:

Für mich bieten alle diese Gruppen interessante Themen (und auch Themenüberschneidungen) und ich muss mir wirklich überlegen welche Treffen ich besuche, wenn mehrere in eine Woche zusammenfallen. Bin schon gespannt wie sich diese Treffen weiter entwickeln.

PS: Am Dienstag den 6.8.2013 findet das nächste Technologieplauscherl bei Neturals statt.