2009-07-04 7 views
8

Ich bekomme diesen Fehler alt text http://img239.imageshack.us/img239/6936/jserror.png, wenn die Karte geladen wird.Javascript "unspezifizierter Fehler" in Open Layers

Der Fehler ist in den ursprünglichen, nicht modifizierten Datei OpenLayers.js auf dieser Linie:

return!!(document.namespaces);

Ich habe versucht, es zu umschreiben:

return (typeof(document.namespaces) != 'undefined');

und es hat funktioniert, aber dann Ich bekomme dieselben "unspezifizierten" Fehler bei weiteren Verweisen auf document.namespaces:

if(!document.namespaces.olv){document.namespaces.add("olv",this.xmlns); ...

Ich versuchte Umschreiben dies:

if(typeof(document.namespaces.olv) == 'undefined') { ...

aber ich die gleichen "nicht näher beschriebenen Fehler" erhalten.

Ich erhalte nur diesen Fehler auf Internet Explorer (ich testete auf 7) und nicht in Firefox.

Irgendwelche Hinweise?

Danke.

Antwort

6

Ich habe die Lösung gefunden.

Das Problem war, dass ich die Karte war die Schaffung, wenn das DOM mit jQuery bereit war:

$(document).ready(function(){ ... //create map here [WRONG] 

Alles, was Sie tun müssen, ist die Karte nach dem onload Ereignis zu erstellen:

window.onload = function() { ... // create map here [CORRECT] 
+2

mit Ihnen alle .onload Ereignisse Überschreibung ist kaum eine gute Sache – Art

+0

Wir hatten Probleme in Firefox mit windows.onload zu tun, entschied so stattdessen für $ (Fenster) .bind ("load", function() { – eclipse31

0

Das Problem mit Internet Explorer besteht darin, dass der M $ -Browser die Dimensionen des Kartenbereichs noch nicht bestimmen kann, wenn die Seite das Dokument bereit oder das Fenster onload erreicht. Wenn Sie dies umgehen möchten, können Sie auch prüfen, Ihre Karte div Dimensionen Einstellung:

<div id="map" style="width:250px;height:250px"></div> 
+0

Danke, du hast mein gespeichert Hintern! Ich musste nur explizit die Höhe und nicht die Breite YMMV einstellen. –

7

Das eigentliche Problem ist, dass document.namespaces nicht bereit ist, manchmal in IE8, wenn $ (document) .ready Triggerung (wegen VML)

Sie können stattdessen verwenden:

jQuery(window).load(function() {} ...);