Bing Maps (Push Pin erzeugen) IE Problem

DiDiJo

Erfahrenes Mitglied
Hi Leute ... ich hab eine Seite für einen Immo-Makler gebastelt.

Auf den Detailseiten der Immobilien findet sich unten ein Bing-Lageplan. Die Daten für die Karte werden aus einer Datenbank geladen. Entweder kann man eine Adresse eingeben und kriegt einen groben Auschnitt der Umgebung (funktioniert wunderbar) oder man gibt die Längen / und Breitengrade sowie die Darstellung an für einen individuell angepassten Ausschnitt (macht noch im IE Probleme).

Hier erstmal der JS / PHP Code (den zukünftig jeder gerne nutzen kann):
Code:
	if ($row['breitengrad'] != '' && $row['laengengrad'] != '' && $row['darstellung_bing'] != '' && $row['hoehe_bing'] != '') {
		$coords = true;
		$breitengrad = $row['breitengrad'];
		$laengengrad = $row['laengengrad'];
		$view 		 = $row['darstellung_bing'];
		$hoehe 		 = $row['hoehe_bing'];		
		$orientierung 	 = ($row['orientation_bing'] != '') ? $row['orientation_bing'] : 'North';		
		
		$rs_tmp = mysql_query("SELECT * FROM anhaenge WHERE objektnr_extern='$row[objektnr_extern]' AND gruppe='TITELBILD' LIMIT 0,1",CONNECTION_ID);
		$tmp = mysql_fetch_array($rs_tmp);
		$titelbild = 'http://www.maklergenius.de/uploads/immopics/small/'.$tmp['pfad'];
		
		$pinText = addslashes('<img src="'.$titelbild.'" alt="" title=""/>');
		$objTitel = addslashes($row['objekttitel']);
	} else {
		$coords = false;
	}
?>
<script type="text/javascript">
	<?php if($coords)  {?>
	var display = '<?=$view?>';
	var GlobePosition = new VELatLong(<?=$breitengrad?>,<?=$laengengrad?>);
	
	var pinID = 1;
	var pin = new VEPushpin(pinID,GlobePosition,null,'<?=$objTitel?>','<?=$pinText?>');
	
    function GetMap()
    {
		map = new VEMap('myMap'); // ZielDiv
		map.LoadMap(GlobePosition, <?=$hoehe?>, VEMapStyle.<?=$view?>);    // Karte initialisieren                                                   
		
		if (display == 'Birdseye'){
			map.AttachEvent("onobliqueenter", OnObliqueEnterHandler);
		}
		
		map.AddPushpin(pin);
    }
	
	function OnObliqueEnterHandler()
	{
		if(map.IsBirdseyeAvailable())
		{
		   var TopOfNeedle = new VELatLong(<?=$breitengrad?>,<?=$laengengrad?>); 
		   map.SetBirdseyeScene(TopOfNeedle,VEOrientation.<?=$orientierung?>);
		}
	}
		
	<?php } else {?>
	
    function GetMap()
    {
      map = new VEMap('myMap'); // ZielDiv
      map.LoadMap();    // Karte initialisieren                                                   
      map.Find('','<?=$IMMO_Adresse?>',null,null,0,1,false,false,false,true, onComplete); // Suchen
    }
	
    function onComplete(shape, FindResult, VEPlace, HasMoreFlag)
    {
      map.LoadMap(VEPlace[0].LatLong,18,VEMapStyle.Birdseye,false);   
      shape = new VEShape(VEShapeType.Pushpin, VEPlace[0].LatLong);
      shape.SetTitle(VEPlace[0].Name);
      map.AddShape(shape);
	  
	  toggleElement('detail_lageplan');
    }	
	
    <?php }?>
	
</script>

Ich weiß, dass meine Lösung etwas Billo ist ... aber Sie funktioniert und reicht für mein Vorhaben vollkommen aus. Im Firefox läuft alles super. Ich kriege den Pin an die richtige Stelle gfesetzt und dieser Info Kasten ist auch korrekt gefüllt. Selbst der WEB-Devolper wirft keine JS Fehler.

Im IE7 wird die Seite gar nicht erst angezeigt und im IE8 hört die Seite mittendrin auf zu laden.

Mein Problem liegt irgendwie in dem ersten Teil des JS Quellcodes .

Sobald ich die Zeilen:
var pin = new[....]

... und ...

map.AddPushpin(pin);

auskommentiere funtioniert alles wunderbar egal welcher Browser ....

*Link entfernt*

in Anbetracht der Tatsache, dass die Seite in ein Paar tagen freigeschaltet wird, kann ich die Fehler nicht drin stehen lassen. ich werde mir jetzt erstmal ne Browserweiche basteln, damit die PushPins nur angezeigt werden, wenn man den Firefox benutzt (da der ja keine Fehler liefert). Aber vlt. kennt ja jemand das Problem ... ich bin im Moment etwas confused
 
Zuletzt bearbeitet:
Moin,

keine Panik, den Fehler hast du in 5 Sekunden ausgebügelt.

Das Skript, was du dort hast, versucht während des Ladens den Inhalt des <div id="out" > oder eines seiner Kindelemente zu Manipulieren. Das darf es jedoch nicht, bevor nicht der schliessende </div>-Tag gelesen wurde.(der IE hat da bei mir sogar eine Fehlermeldung inkl. der Adresse der Fehlerbeschreibung in der MS-Knowledge-Base ausgespuckt :-))
http://support.microsoft.com/kb/927917

Die Lösung ist recht Banal: verfrachte das Skript ans Ende des Dokumentes, Hauptsache ausserhalb dieses <div id="out" >

Besser noch: rufe das Ganze erst per onload auf.
 

Neue Beiträge

Zurück