j.j.: Javascript: Warum hat Safari Probleme mit const? (bitte testen mit test31.html)

Beitrag lesen

Hallo Rolf!

Du bindest das Script mit defer ein - okay. Damit gibt's keine Probleme mit einer Race Condition.

Wenn Du das auf den Kommentar in Zeile 73 beziehst (der nichts mit der const-Problematik zu tun hat): Die Bildhöhe wird mit CSS an die Bildschirmgröße angepaßt. in Zeile 73 weiß es (nur) Safari offenbar noch nicht, daß das Bild per CSS evtl. kleiner wurde und die Berechnung Bild[0].height / 500 ergibt immer 1. Also wird das später nochmal wiederholt.

  • function trans referenziert xy. Solange es trans gibt, gibt es xy (trans bildet eine Closure und sollte den try-Scope einschließen)
  • Der resize-Handler referenziert trans. Solange es den resize-Handler gibt, gibt es trans (der resize-Handler bildet eine closure, die trans und auch xy einschließt)
  • der resize-Handler wurde an window.onresize zugewiesen. Damit sollte er bis zu einer anderen Zuweisung oder bis zum Reload der Seite existieren.

Testseite ohne onresize, keine Änderung: peter-hindelang.de/Bilder/test30.html

Es ist MÖGLICH, dass diese Referenzbeziehungen, die xy (also dein BL) am Leben erhalten sollten, von Safari nicht korrekt beachtet werden. Ich habe das gerade in Chrome/Android betrachtet, da wird es korrekt erhalten. Safari kann ich nicht testen. Kann es sein, dass die JavaScript-Engine von Safari Closures nur auf Funktionsscope-Ebene bildet?

Ich hab eine Testseite gemacht mit onresize, ohne try/catch, scheint es zu funktionieren:

peter-hindelang.de/Bilder/test31.html Müßte man ausführlich testen.

Was würde daraus folgen? Ist es allgemein so, wie Du schreibst:

Kann es sein, dass die JavaScript-Engine von Safari Closures nur auf Funktionsscope-Ebene bildet?

Wäre das nicht ein kapitaler Browserfehler, der allgemein bekannt sein sollte? Bei bugs.webkit.org hatte ich auch mal gesucht, aber wohl kaum die richtigen Begriffe verwendet. (Letztenendes werd ich sowieso bei var bleiben müssen, insbesondere weil ich den problematischen Browser nicht selber testen kann)

j.j.