LSpreee: getBoundingClientRect nicht möglich bei Objekt (dojo framework)

Hallo, nach zwei Tagen ohne einen Fortschritt hoffe ich nun auf Eure Hilfe.

Zunächst: meine JS-Kenntnisse sind sehr gering. Mit dojo beginne ich eben erst.

Hintergrund:
ich versuche eine interaktive Karte mit diesem Framework zu erstellen. Es gibt ein kleines Einführungsbeispiel, welches ich lokal nicht zu 100% zum Laufen kriege. Die Karte baut sich auf, die Zoomfunktion steht bereit. Nur die Tooltipps (in diesem Fall die Staatennamen) erscheinen nicht. Rufe ich den Link auf, gehen die Tooltipps in meinem Browser. Nur wenn ich es lokal nachbaue geht es nicht. Der Unterschied ist: ich binde lokal die dojo.js ein, was das Gesamtpaket darstellt. Im Beispiel binden sie eine andere dojo.js ein, die dort "source build" genannt wird.

Das Problem, welches mir Firebug ausgibt:
Ich habe durch Firebug versucht, die Ursache der fehlenden Tooltipps zu finden. Der Fehler, der tatsächlich zum Abbruch führt, lautet:

getBoundingClientRect is not a function

Diese Methode wird in Zeile 6411 des dojo.js.uncompressed.js (einer Form von dojo.js mit EOL und Whitespaces) auf ein Objekt angewendet durch

node.getBoundingClientRect();

Ich habe einige console.log("node: ", node) in die JS-Files geschrieben, also sehe ich den Typ des Objekts. Leider sagen mir die Objekttypen in JS wenig. Ergebnis:
Die Funktion node.getBoundingClientRect() wird häufiger aufgerufen und in den Fällen wo html Objekte reingesteckt werden

<div id="USStates" class="mapContainer" style="display: block;">

funktioniert die Funktion einwandfrei. Dies ist beim Aufbauen der Map der Fall. Später (beim Hover über die Staaten) wird der Funktion dies übergeben:

Object { l=10,  more...}

Dies ist die Angabe in der Konsole von Firebug.  Ein Klick darauf wechselt zum Reiter DOM im Firebug. Dort steht der Pfad window > Object und es werden die Eigenschaften aufgelistet: h, l, t, w, x, y mit Pixelwerten.

Die Frage:
was für ein Objekt ist das (window > Object) und sollte darauf die Funktion getBoundingClientRect angewendet werden können? Falls nicht: wie hat sich dojo das gedacht? Übergebe ich ihm was Falsches oder sollte es das können?

Vielleicht hat ja jemand Erfahrung mit dem Framework. Ich verstehe nicht, warum ich das Beispiel nicht auf meinem Rechner rekonstruieren kann. Das angegebene Minimalbeispiel scheint völlig anders zu sein, als wie man das lokal realisieren soll. Angabe in diesem source build:

// We strongly recommend that your applications always use a build of
// Dojo.

Ich habe schon alles versucht. Bitte helft mir. Und verzeiht, falls ich mich nicht klar ausgedrück habe.

Grüße und Dank im Vorraus.

  1. Hi,

    Zunächst: meine JS-Kenntnisse sind sehr gering. Mit dojo beginne ich eben erst.

    Wenn deine JS-Kenntnisse gering sind, solltest du damit beginnen, dich mit den Grundlagen von JavaScript zu beschäftigen, und nicht gleich mit einem Framework.

    wie hat sich dojo das gedacht? Übergebe ich ihm was Falsches

    Vermutlich.
    Solche Frameworks werden idR. ausführlich getestet. Dass du einen Fehler darin gefunden hast, ist zwar nicht ausgeschlossen - dass du in der „Bedienung“ einen gemacht hast, aber vermutlich um einiges wahrscheinlicher.

    Ich habe schon alles versucht.

    Echt? Respekt.
    Dann musst du wohl in ein Paralleluniversum wechseln - vielleicht gibt es da Sachen, die du noch nicht probiert hast ...

    Alternativ könntest du natürlich auch die Tipps für Fragende berücksichtigen, und uns *aussagekräftige* Informationen liefern.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Wenn deine JS-Kenntnisse gering sind, solltest du damit beginnen, dich mit den Grundlagen von JavaScript zu beschäftigen, und nicht gleich mit einem Framework.

      Negativ. Ich benutze das Framework gerade, um mich nicht mit Browserkompatibilität und co rumzuschlagen. Wenn Dir das nicht passt: bitte nicht weiter auf meine Frage antworten.

      wie hat sich dojo das gedacht? Übergebe ich ihm was Falsches

      Vermutlich.
      Solche Frameworks werden idR. ausführlich getestet. Dass du einen Fehler darin gefunden hast, ist zwar nicht ausgeschlossen - dass du in der „Bedienung“ einen gemacht hast, aber vermutlich um einiges wahrscheinlicher.

      Ich habe schon alles versucht.

      Echt? Respekt.
      Dann musst du wohl in ein Paralleluniversum wechseln - vielleicht gibt es da Sachen, die du noch nicht probiert hast ...

      Wenn ich es mir recht überlege: überhaupt nicht mehr auf meine Fragen antworten.

      1. Hi,

        Negativ. Ich benutze das Framework gerade, um mich nicht mit Browserkompatibilität und co rumzuschlagen.

        Es geht nicht um Browserkompabilität, sondern darum, erst mal ein grundlegendes Verständnis dafür zu haben, wie JavaScript funktioniert.

        Wenn ich es mir recht überlege: überhaupt nicht mehr auf meine Fragen antworten.

        Wenn du es dir noch genauer überlegst: Keine solchen Fragen mehr stellen.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Was ist Dein Problem _an meiner FRAGE_?

          1. Hi,

            Was ist Dein Problem _an meiner FRAGE_?

            In wie fern hältst du (d)eine Problembeschreibung für einen Außenstehenden, der so gut wie absolut *nichts* von dem, was du in deinem Versuch gemacht hast, zu sehen bekommt, für nachvollziehbar?

            Was verstehst du an dem deutlichen Hinweis „Zeige den problematischen Quellcode!“ aus den Tipps für Fragende nicht?

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. In wie fern hältst du (d)eine Problembeschreibung für einen Außenstehenden, der so gut wie absolut *nichts* von dem, was du in deinem Versuch gemacht hast, zu sehen bekommt, für nachvollziehbar?

              a) warum (i.a.W) sagst Du das nicht einfach, statt mir von dem Projekt abzuraten und Paralleluniversen zu reden?

              b) ich habe das Problem, ein Beispiel nicht nachvollziehen zu können. Ich kriege keine Tooltipps für ein ansonsten nahezu unverändertes Beispiel. Die Änderung habe ich angegeben. Der Rest funktioniert. Da ich schon mit Firebug versucht habe, die Lösung zu finden, habe ich an genau diesem Punkt eingesetzt.

              Was verstehst du an dem deutlichen Hinweis „Zeige den problematischen Quellcode!“ aus den Tipps für Fragende nicht?

              Der Quelltext ist der hinter dem zweiten Link aus dem OP. Hier gerne nochmal:

              <html>  
                <head>  
                  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
                  <title>Chart: Map</title>  
                  <style type="text/css">  
                    @import "http://www-01.ibm.com/software/ucd/dojo/dojo/resources/dojo.css";  
                    @import "http://www-01.ibm.com/software/ucd/dojo/dijit/tests/css/dijitTests.css";  
                    @import "http://www-01.ibm.com/software/ucd/dojo/dijit/themes/tundra/tundra.css";  
                    @import "http://www-01.ibm.com/software/ucd/dojo/dojox/geo/charting/resources/Map.css";  
                
                    .mapContainer {  
                      display: none;  
                      width: 810px;  
                      height: 400px;  
                      border: solid 1px;  
                    }  
                
                    .mapVerticalContainer {  
                      display: none;  
                      width: 405px;  
                      height: 500px;  
                      border: solid 1px;  
                    }  
                  </style>  
                  <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6.0/dojo/dojo.xd.js" type="text/javascript"></script>  
                  <script type="text/javascript">  
                    dojo.require("dojox.geo.charting.Map");  
                    dojo.addOnLoad(function(){  
                      var USStates = new dojox.geo.charting.Map("USStates", "http://www-01.ibm.com/software/ucd/dojo/dojox/geo/charting/resources/data/USStates.json");  
                      USStates.setMarkerData("http://www-01.ibm.com/software/ucd/dojo/dojox/geo/charting/resources/markers/USStates.json");  
                    });  
                  </script>  
                
                </head>  
                <body class="tundra">  
                  <h1>Simple Maps,support zoom in and zoom out.</h1>  
                  <div class="mapContainer" style="display:block;" id="USStates"></div>  
                </body>  
              </html>  
              
              

              Geändert ist die Zeile für die Einbindung des dojo-Frameworks (google repository) und die Pfade für JSON und CSS wurden absolut gemacht.

              1. Hi,

                In wie fern hältst du (d)eine Problembeschreibung für einen Außenstehenden, der so gut wie absolut *nichts* von dem, was du in deinem Versuch gemacht hast, zu sehen bekommt, für nachvollziehbar?

                a) warum (i.a.W) sagst Du das nicht einfach, statt mir von dem Projekt abzuraten und Paralleluniversen zu reden?

                Dass „ich habe schon alles versucht“ uns nicht hilft, dein Problem nachzuvollziehen, sollte dir doch von vornherein selber einleuchten.

                Und warum - i.a.W. - *bestätigst* du, die Tipps für Fragende zur Kenntnis genommen zu haben - und berücksichtigst sie dann aber beim Stellen deiner Frage nicht?

                Der Quelltext ist der hinter dem zweiten Link aus dem OP.

                Du meinst diesen hier? http://www-01.ibm.com/software/ucd/dojo/dojox/geo/charting/tests/test_maps.html

                Wow, dann arbeitest du also bei IBM(?).

                Dann hast du uns aber entweder angeflunkert - denn in diesem Beispiel sehe ich in drei unterschiedlichen Browsern, mit denen ich es gerade mal getestet habe, die Tooltipps (wenn auch im IE9 mit etwas Verzögerung) - oder auch den Hinweis in den Tipps für Fragende, dass du es erwähnen solltest, wenn das Problem nur in einem speziellen Browser auftritt, ebenfalls ignoriert.

                Oder, letzte Möglichkeit - *das* ist gar nicht *dein* Versuch, sondern nur das unveränderte Original.

                Hier gerne nochmal:

                Wenn ich das per Copy&Paste teste, bekomme ich erst mal eine (kryptische) Fehlermeldung an einer Stelle, wo Dojo offenbar überprüft, ob ihm eine bestimmte Konfiguration übergeben wurde.

                (Zwischenfrage: Hast du überhaupt mal in die JavaScript-Fehlerkonsole deines Browser geschaut?
                Weißt du überhaupt, dass es eine solche gibt ...? Falls nein, sind wir wieder an dem Punkt, der dir zwar nicht schmecken mag, aber trotzdem unumstößlich ist: Don't f__k around with complex techniques without knowing the absolute basics ...)

                <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6.0/dojo/dojo.xd.js" type="text/javascript"></script>

                Das sieht im Original so aus:

                <script type="text/javascript" djConfig="parseOnLoad:true,gfxRenderer:'svg,vml,silverlight'" src="../../../../dojo/dojo.js"></script>

                Hältst du es für eine gute Idee, davon einfach nach Belieben Teile wegzulassen (konkret, das „Attribut“ djConfig)?

                Wenn ich das erst mal erst mal korrigiere, kommt eine Meldung, dass das Script was du angegeben hast, von Dojos „Loader“ nicht geladen werden konnte.
                Also das „.xd“ auch noch rausgeschmissen, die Adresse damit also zu http://ajax.googleapis.com/ajax/libs/dojo/1.6.0/dojo/dojo.js korrigiert - dann kommt als nächster Fehler,

                Could not load 'dojox.geo.charting.Map'; last tried '../dojox/geo/charting/Map.js'

                dojo.require("dojox.geo.charting.Map");

                Laut Netzwerk-Tab von Firebug scheint das keine Adresse zu sein, die direkt angefordert wird, sondern der Loader setzt das offenbar um in http://www-01.ibm.com/software/ucd/dojo/dojox/geo/charting/Map.js.
                Wie das jetzt aber anzupassen wäre, damit dieser (Pseudo-)Pfad vom Loader korrekt aufgelöst wird, wenn man die restlichen Pfade angepasst hat, kann ich dir spontan auch nicht sagen (da wäre wohl genauere Beschäftigung mit den Interna von Dojo angesagt) - an der Stelle einfach den absoluten Pfad anzugeben, so simpel klappt es jedenfalls erwartungsgemäß nicht.

                (Laut Firebug wird versucht, http://ajax.googleapis.com/ajax/libs/dojo/1.6.0/dojox/geo/charting/Map.js anzufordern - die Adresse wird also offenbar mit dem Pfad, von dem Dojo geladen wurde, kombiniert. Vielleicht hilft es für's erste schon, sich die ganzen Scripte mal runterzuladen und lokal abzulegen [natürlich per HTTP erreichbar, d.h. also Testen über einen lokalen Webserver, nicht über's Dateisystem] - das könnte schon mal die potentielle Fehlerquelle „Zusammensuchen von Scripten aus unterschiedlichen Winkeln des WWW“ ausschließen).

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                1. Dass „ich habe schon alles versucht“ uns nicht hilft, dein Problem nachzuvollziehen, sollte dir doch von vornherein selber einleuchten.

                  Sollte heissen: ich habe nicht bloß einmal probiert, sondern 2 Tage probiert.

                  Und warum - i.a.W. - *bestätigst* du, die Tipps für Fragende zur Kenntnis genommen zu haben - und berücksichtigst sie dann aber beim Stellen deiner Frage nicht?

                  Weil ein Quelltext nicht ausreicht und ich den Nutzern nicht zumuten wollte, die dojo, css und JSON files runterzuladen.

                  Wow, dann arbeitest du also bei IBM(?).

                  Nein.

                  Dann hast du uns aber entweder angeflunkert - denn in diesem Beispiel sehe ich in drei unterschiedlichen Browsern, mit denen ich es gerade mal getestet habe, die Tooltipps (wenn auch im IE9 mit etwas Verzögerung) - oder auch den Hinweis in den Tipps für Fragende, dass du es erwähnen solltest, wenn das Problem nur in einem speziellen Browser auftritt, ebenfalls ignoriert.

                  Oder, letzte Möglichkeit - *das* ist gar nicht *dein* Versuch, sondern nur das unveränderte Original.

                  Ohhh. Das ist ja auch gar nicht, was ich behauptet habe. Oder doch?

                  Hier gerne nochmal:

                  Wenn ich das per Copy&Paste teste, bekomme ich erst mal eine (kryptische) Fehlermeldung an einer Stelle, wo Dojo offenbar überprüft, ob ihm eine bestimmte Konfiguration übergeben wurde.

                  Ich weiß. Siehe **)

                  (Zwischenfrage: Hast du überhaupt mal in die JavaScript-Fehlerkonsole deines Browser geschaut?

                  Ja, siehe OP. Da ich bereits von Firebug sprach...

                  Weißt du überhaupt, dass es eine solche gibt ...? Falls nein, sind wir wieder an dem Punkt, der dir zwar nicht schmecken mag, aber trotzdem unumstößlich ist: Don't f__k around with complex techniques without knowing the absolute basics ...)

                  Obsolet.

                  An dieser Stelle mal ein Link, wo ich es jetzt mal eingerichtet habe.
                  Beispiel Map

                  So sieht es bei mir aus.

                  Weiter gehts:

                  <script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6.0/dojo/dojo.xd.js" type="text/javascript"></script>

                  Das sieht im Original so aus:

                  <script type="text/javascript" djConfig="parseOnLoad:true,gfxRenderer:'svg,vml,silverlight'" src="../../../../dojo/dojo.js"></script>

                  Damit wird eine dojo.js eingebunden, die nichts mit der dojo.js zu tun hat, die für die Entwickler bestimmt ist. Ich verstehe es nicht ganz, man kann aber diese ../../../../dojo/dojo.js sich ansehen und da steht der Vermerk. Ist nicht so, dass ich es toll finde an dem Code rumzuschrauben. Aber mit dieser Version geht es eben nicht.
                  Benutze ich allerdings die für Entwickler vorgesehene dojo.js (wie zum Beispiel unter google zu finden) geht es (bis auf die Tooltipps).

                  Hältst du es für eine gute Idee, davon einfach nach Belieben Teile wegzulassen (konkret, das „Attribut“ djConfig)?

                  Nein, war ein Versehen, allerdings habe ich das sogar in meiner Version drin, es nützt nix.

                  Wenn ich das erst mal erst mal korrigiere, kommt eine Meldung, dass das Script was du angegeben hast, von Dojos „Loader“ nicht geladen werden konnte.

                  Das kann ich nicht nachvollziehen.

                  Also das „.xd“ auch noch rausgeschmissen, die Adresse damit also zu http://ajax.googleapis.com/ajax/libs/dojo/1.6.0/dojo/dojo.js korrigiert - dann kommt als nächster Fehler,

                  Could not load 'dojox.geo.charting.Map'; last tried '../dojox/geo/charting/Map.js'

                  dojo.require("dojox.geo.charting.Map");

                  das xd gehört da ja auch hin. Wenn Du es da lässt und es nicht geht, liegt das an den JSON dateien. Die vertragen keinen absoluten Pfad. Jedenfalls wenn ich die lokal speicher und einbinde, geht es.

                  Laut Netzwerk-Tab von Firebug scheint das keine Adresse zu sein, die direkt angefordert wird, sondern der Loader setzt das offenbar um in http://www-01.ibm.com/software/ucd/dojo/dojox/geo/charting/Map.js.
                  Wie das jetzt aber anzupassen wäre, damit dieser (Pseudo-)Pfad vom Loader korrekt aufgelöst wird, wenn man die restlichen Pfade angepasst hat, kann ich dir spontan auch nicht sagen (da wäre wohl genauere Beschäftigung mit den Interna von Dojo angesagt) - an der Stelle einfach den absoluten Pfad anzugeben, so simpel klappt es jedenfalls erwartungsgemäß nicht.

                  (Laut Firebug wird versucht, http://ajax.googleapis.com/ajax/libs/dojo/1.6.0/dojox/geo/charting/Map.js anzufordern - die Adresse wird also offenbar mit dem Pfad, von dem Dojo geladen wurde, kombiniert. Vielleicht hilft es für's erste schon, sich die ganzen Scripte mal runterzuladen und lokal abzulegen [natürlich per HTTP erreichbar, d.h. also Testen über einen lokalen Webserver, nicht über's Dateisystem] - das könnte schon mal die potentielle Fehlerquelle „Zusammensuchen von Scripten aus unterschiedlichen Winkeln des WWW“ ausschließen).

                  Getan. Man kann sich das ganze dojo Paket runterladen und dann gehts auch. Die Karte baut auf, und die Zoomfunktion geht. Nur die Tooltipps fehlen mit dem Firebug Hinweis (bei jedem Mouseover): getBoundingClientRect is not a function. Hierzu siehe noch einmal bitte OP.

                  1. Hi,

                    Sollte heissen: ich habe nicht bloß einmal probiert, sondern 2 Tage probiert.

                    Hilft uns aber auch nicht weiter dabei, deinen Fehler nachzuvollziehen.

                    Weil ein Quelltext nicht ausreicht und ich den Nutzern nicht zumuten wollte, die dojo, css und JSON files runterzuladen.

                    Deshalb steht da ja auch, dass ein Online-Beispiel manchmal das beste sein kann, um ein Problem direkt nachvollziehbar zu machen.

                    Oder, letzte Möglichkeit - *das* ist gar nicht *dein* Versuch, sondern nur das unveränderte Original.

                    Ohhh. Das ist ja auch gar nicht, was ich behauptet habe. Oder doch?

                    Tipps für Fragende: „Zeige den problematischen Quellcode!“

                    Liegt das Verständnisproblem beim Wort „problematisch“, oder wo?

                    Wenn du uns das Original zeigst, das einwandfrei funktioniert - wie soll uns das weiterhelfen, dein *Problem* zu analysieren?

                    Damit wird eine dojo.js eingebunden, die nichts mit der dojo.js zu tun hat, die für die Entwickler bestimmt ist. Ich verstehe es nicht ganz, man kann aber diese ../../../../dojo/dojo.js sich ansehen und da steht der Vermerk.

                    In beiden Versionen sehe ich oben den Kommentar,
                    “This is an optimized version of Dojo, built for deployment and not for development.”
                    Du bist aber noch nicht beim Deployment, sondern in der Development-Phase.
                    Und für die eignen sich die Versionen, die „lesbar“ formatiert sind, sehr viel besser - da kann man problemlos bspw. mal ein einer bestimmten Stelle einen Breakpoint setzen, was man in der „alles in einer Zeile“-Codewurst der Deployment-Versionen sehr viel schlechter kann.

                    Benutze ich allerdings die für Entwickler vorgesehene dojo.js (wie zum Beispiel unter google zu finden) geht es (bis auf die Tooltipps).

                    In deinem aktuellen Online-Beispiel finde ich aber wieder nur die Codewurst-Version.
                    Ersetze die doch bitte mal durch eine lesbare (welche die passende ist, musst du mal schauen) - dann können wir uns vielleicht auch einfach im Debugger mal anschauen, was “node” an dieser Stelle, wo Firebug den Fehler

                    node.getBoundingClientRect is not a function

                    meldet, denn tatsächlich für ein Objekt ist.

                    MfG ChrisB

                    --
                    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                    1. In beiden Versionen sehe ich oben den Kommentar,
                      “This is an optimized version of Dojo, built for deployment and not for development.”
                      Du bist aber noch nicht beim Deployment, sondern in der Development-Phase.

                      Sehe diesen Kommentar nicht in der Beispielversion.

                      Es gibt also drei Versionen:

                      1. Die Version des Beispiels. (Enthält keine Basisklassen. Lädt irgendwie später das Framework?)

                      2. und 3) Die, die man verwenden soll (enhtalten Basisklassen):
                        compressed
                        uncompressed

                      Bei der ersten weiß ich a) nicht, warum sie diese bei einem Beispiel verwenden, wenn man es nicht mit jener nachvollziehen kann und b) nicht, was sie genau macht. Irgendwie verändert sie den DOM und lädt das Paket.

                      In deinem aktuellen Online-Beispiel finde ich aber wieder nur die Codewurst-Version.

                      Ja, tut mir Leid. Ich hatte noch die Googleversion (die der 2) entspricht) verwendet.

                      Ersetze die doch bitte mal durch eine lesbare (welche die passende ist, musst du mal schauen) - dann können wir uns vielleicht auch einfach im Debugger mal anschauen, was “node” an dieser Stelle, wo Firebug den Fehler

                      node.getBoundingClientRect is not a function
                      meldet, denn tatsächlich für ein Objekt ist.

                      Geändert.

                      Cool. Bin gespannt.
                      Mein Beispiel läuft jetzt mit der uncompressed Version von dojo.

                      Ich hoffe sehr, dass Du noch an diesem Thread bist und würde mich freuen, wenn sich das Problem noch klären liesse.

                      1. Hi,

                        Mein Beispiel läuft jetzt mit der uncompressed Version von dojo.

                        Gut, da ist mit dem Debugger mal reinschauen doch jetzt schon sehr viel einfacher.

                        node ist an der als fehlerhaft gemeldeten Stelle eine Referenz auf das DIV-Element #USStates.
                        Unter dessen __proto__-Eigenschaften taucht die Methode getBoundingClientRect auf.

                        Und
                        javascript:alert(document.getElementById("USStates").getBoundingClientRect)
                        der Adresszeile des FF eingegeben bestätigt auch, dass das eine native Funktion ist.

                        Was da jetzt das Problem ist, ist für mich nicht wirklich ersichtlich.

                        Die fehlerhafte Zeile ist 6412 in der dojo.js.uncompressed.js - aber ich kann in der dojo.js, die das Original-Beispiel verwendet, gar keine Entsprechung dieser Zeile finden - nicht mal der Methodenname getBoundingClientRect taucht dort irgendwo auf.

                        Mehr als vermuten, dass das an irgendwie inkompatiblen Versionen liegt, kann ich da momentan leider auch nicht.

                        MfG ChrisB

                        --
                        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                        1. Gut, da ist mit dem Debugger mal reinschauen doch jetzt schon sehr viel einfacher.

                          Vielen Dank für die Einarbeitung. Habe jetzt echt gelernt, dass es für die Helfer einfacher sein sollte, mein Problem nachzuvollziehen.

                          node ist an der als fehlerhaft gemeldeten Stelle eine Referenz auf das DIV-Element #USStates.
                          Unter dessen __proto__-Eigenschaften taucht die Methode getBoundingClientRect auf.

                          Und
                          javascript:alert(document.getElementById("USStates").getBoundingClientRect)
                          der Adresszeile des FF eingegeben bestätigt auch, dass das eine native Funktion ist.

                          Was da jetzt das Problem ist, ist für mich nicht wirklich ersichtlich.

                          Oweia. Was mach ich denn jetzt. Ich müsste das echt hinbekommen. Die Tooltipps möchte ich später mit Formularelementen belegen, was lt. dojo funktionieren soll. Ich benötige irgendwas um eine interaktive Weltkarte zu machen mit JS. Auf jeden Fall ohne Flash...

                          Könntest Du noch einmal, mit dem Wissen von jetzt, das OP lesen? Besonders den Absatz

                          -------------------------------

                          Später (beim Hover über die Staaten) wird der Funktion dies übergeben:

                          Object { l=10,  more...}

                          Dies ist die Angabe in der Konsole von Firebug.  Ein Klick darauf wechselt zum Reiter DOM im Firebug. Dort steht der Pfad window > Object und es werden die Eigenschaften aufgelistet: h, l, t, w, x, y mit Pixelwerten.

                          Die Frage:
                          was für ein Objekt ist das (window > Object) und sollte darauf die Funktion getBoundingClientRect angewendet werden können?

                          --------------------------------

                          Es ist nämlich wirklich so, dass die Funktion getBounding... angewendet werden _kann_, _wenn_ das gegebene Objekt ein html-Objekt ist. Nur bei dem Wert, den ich _beschrieben_ habe, geht es nicht. Ich habe ihn beschrieben, weil ich den Objekttyp nicht kenne. Vielleicht kennst Du ihn. Und wenn man ihn kennt, kann man vielleicht finde, warum dieser übergeben wird und nicht ein html-Objekt und so zur Lösung kommen.

                          Ich werde morgen nochmal die dojo.js.uncompressed.js durch die von mir erweiterte Version mit den console.log -Befehlen austauschen, die einige Variablen in die firebug-Konsole schickt. Vielleicht nützt es...

                          Die fehlerhafte Zeile ist 6412 in der dojo.js.uncompressed.js - aber ich kann in der dojo.js, die das Original-Beispiel verwendet, gar keine Entsprechung dieser Zeile finden - nicht mal der Methodenname getBoundingClientRect taucht dort irgendwo auf.

                          diese komische dojo.js, die die verwenden ist eben komplett anders. Sie nennen es source build. Ich kenne diesen Begriff nicht und weiß nicht, wie sie es mit der hinkriegen. Diese dojo.js, die ja auch größenmäßig viel kleiner ist, lädt irgendwie anschliessend per DOM-Manipulation die ganzen _base Klassen u.s.f. Ich habe das nur gesehen durch "view genereated source" im Web Developer...

                          Vielen Dank.

                          Mehr als vermuten, dass das an irgendwie inkompatiblen Versionen liegt, kann ich da momentan leider auch nicht.

                          _Irgend_eine Idee, wie ich verfahren kann?

                          Grüße, LSpreee

                          1. Hallo,

                            die dojo.js.uncompressed.js ist jetzt mit ein paar extra-Informationen ausgestattet. Ein paar console.log's sind drin, um Informationen über die Objekte zu kriegen. Bitte in der Konsole von firebug nachsehen.

                            Grüße

                          2. Hi,

                            Es ist nämlich wirklich so, dass die Funktion getBounding... angewendet werden _kann_, _wenn_ das gegebene Objekt ein html-Objekt ist. Nur bei dem Wert, den ich _beschrieben_ habe, geht es nicht.

                            Ja, weil das kein HTML-Elementobjekt ist.

                            Ich habe ihn beschrieben, weil ich den Objekttyp nicht kenne. Vielleicht kennst Du ihn.

                            Wie's aussieht, ist das ein ganz normales JavaScript-Objekt mit ein paar Eigenschaften.

                            Und wenn man ihn kennt, kann man vielleicht finde, warum dieser übergeben wird und nicht ein html-Objekt und so zur Lösung kommen.

                            Zuerst ist node das DIV-Objekt:

                            --- dojo.coords ---
                            dojo.coords node: <div id="USStates" class="mapContainer" style="display:block;">

                            • und an der Stelle gibt es auch noch keinen Fehler.

                            Wenig später, offenbar noch mal an der gleichen Stelle im Script, erfolgt dann aber ein weiterer Aufruf, an dem node kein HTML-Elementobjekt mehr ist, sondern ein „normales“ JavaScript-Object:

                            --- dojo.coords ---
                            dojo.coords node: Object { l=24, t=60, w=812, more...}

                            und danach gibt's dann den Fehler, weil dieses Object die Methode wie zu erwarten natürlich nicht kennt.

                            Die Tooltipps möchte ich später mit Formularelementen belegen, was lt. dojo funktionieren soll. Ich benötige irgendwas um eine interaktive Weltkarte zu machen mit JS. Auf jeden Fall ohne Flash...

                            Muss es denn speziell dieses Script/Beispiel sein, das erst mal tonnenweise weitere Scriptdateien nachlädt, was zumindst auf deinem Beispiel-Webspace auch einige Zeit dauert ...?
                            Mit 'ner Image-Map und ein bisschen „normalem“ JavaScript hätte man das vermutlich in 'ner halben Stunde gebastelt.

                            MfG ChrisB

                            --
                            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?