Openlayers Mouse Problem? oder besser OfflineVersion?

Hallo womisa,

probier mal das hier:
http://home.arcor.de/andre.joost/gpxviewer.zip

Gruß,
ajoessen

Hallo ajoessen,

ich muß zu meiner Schande gestehen, ich hatte wegen dem FileZugriff einen Tippfehler drin. Jetzt geht es. Mir hat es viel gebracht, dass Du geschrieben hast es geht bei Dir mit Windows XP und FireFox…

Noch ne Frage: Braucht man die Lokale GPX.js ist die nicht schon in der OpenLayers.js mit drin? Ich habe die GPX Tracks bisher so eingebunden

lgpx = new OpenLayers.Layer.GML(“Gruenhuette.gpx”, “./gpx/Gruenhuette.gpx”, {
format: OpenLayers.Format.GPX,
style: {strokeColor: “green”, strokeWidth: 5, strokeOpacity: 0.5},
projection: new OpenLayers.Projection(“EPSG:4326”)
});
map.addLayer(lgpx);

und hatte keine GPX.js. Oder hast du da drin was geändert?

Herzlichen Dank für Deine Super Unterstützung und Mühe. Dein Beitrag hat mich einen großen Schritt voran gebracht.

Danke
Achim

Diese Fehlermeldung:

kommt, wenn man von einer lokalen Datei aus per Script eine andere Datei ausserhalb desselben Pfades aufruft. Auf diese Weise will Firefox verhindern, dass man per Javascript seine eigene Platte liest und dann an andere schickt.

Laut http://kb.mozillazine.org/Security.fileuri.strict_origin_policy soll es helfen, in “about:config” die Eimnstellungen für “security.fileuri.strict_origin_policy” auf “false” zu setzen.

Seit 2.7 (August 2008, glaub ich) unterstützt OpenLayers selbst auch gpx-Dateien. Ältere Versionen brauche GPX.js. Bei neueren schadet es nicht, ist aber auch nicht nötig.

Max

Hallo

das mit dem absoluten Filezugriff wundert mich auch, dass das geht. Ich hatte in dieser Ecke auch schon Probleme, aber das war glaube ich in Verbindung mit einem lokalen Webserver. Deshalb habe ich bei mir auch nicht weitergesucht, obwohl es nur ein Tippfehler war. Dank der Aussage von ajoessen habe ich es dann nochmal versucht…und siehe da es geht.

Das geht es vermutlich nur, weil der HTML File auch lokal geladen wird.

MfG
Achim

Ps: Den GPX.js braucht man schon in der Offline Version. Bei mir gings nur in der Onlineversion und da läd er nach…

Hallo ajoessen,

was mich noch interessieren würde ist, ob du bei die für den GpxFile auch einen absoluten Filepath angeben kannst. Ich bin nach meinem derzeitgen Kenntnisstand der Meinung, dass die GPX Files unterhalb oder im DIR von dem aufrufenden HTML File liegen müssen. Sonst kommt bei mir wieder der ACCESS Fehler. Kannst du das eventuell bestätigen?

Bei den lokalen MAP geht das ja problemlos. Wo wird das entschieden (Zugriff?)?
Sonst alles TOP
Achim

Ps: Das mit dem Weglassen des GPX.js kann ich bestätigen.

Ja, ist bei mir auch so. Warum, weiß ich nicht. Ich bin in js nicht so firm. Den GPX-Viewer habe ich nur aus den Beispielen im Wiki und abschauen bei andern zusammengefrickelt :wink:

Gruß,
ajoessen

Nochmal für mich bitte, damit ich mir nichts falsches merke: Könnt Ihr bestätigen, dass “security.fileuri.strict_origin_policy = false” im Firefox dagegen keine Abhilfe schafft?

Da habe ich bei mir nichts geändert, aber es klappt doch:
var gpxlayer = new OpenLayers.Layer.GPX(“gpx”, “file:///D:/Karten/gpx/eigeneTouren/290910.gpx”, “#FFFF00”);
map.addLayer(gpxlayer);

und auch ohne GPX.js:
var gpxlayer = new OpenLayers.Layer.GML(“Track”, “file:///D:/Karten/gpx/eigeneTouren/290910.gpx”,
{
style: {strokeColor: ‘red’, strokeWidth: 4, strokeOpacity: 0.5},
projection: map.displayProjection,
format: OpenLayers.Format.GPX,
formatOptions: {
extractAttributes: true,
extractStyles: false,
maxDepth: 2,
extractTracks: true,
extractRoutes: false,
extractWaypoints: false
},
});

        map.addLayer(gpxlayer);

Gruß,
ajoessen

Hallo ajoessen,

liegt dein HTML Startfile in D:/Karten/ ? Falls ja leg mal die GPXFile auf ein anderes laufwerk oder anderen Pfad als D:/Karten/ obs dann auch noch geht?

MfG
Achim

Hallo,
egal ob ich html oder gpx nach C:/ verschiebe: tuts immer.
Hast du zufälligerweise Leerzeichen oder Umlaute im Verzeichnisnamen?

Gruß,
ajoessen

Hallo

doch das Umschalten auf “security.fileuri.strict_origin_policy = false” erlaubt den GPX File Zugriff auf beliebige DIRs und Laufwerke. Was man sich damit aber für Sicherheitsprobleme einhandelt ?

Falls die GPX Files unterhalb des aufrufenden HTML liegen kann man auch eine absulute File-GPX-Angabe eingeben, dann kann man “security.fileuri.strict_origin_policy” auf dem Stamdardwert belassen. Seltsam, dass es bei den TILES trotzdem geht …

MfG
Achim

Danke für Rückmeldungen,

Bei Tiles bekommt der Browser einfach die URL eines Bildes mitgeteilt und den Befehl “render das mal”. Sowas hält man für harmlos.

Javascript hat theoretisch alle Möglichkeiten, den Browser zu kontrollieren und darüber hinaus die Fähigkeit, selbst mit fernen Servern zu kommunizieren. Das eröffnet eingeschmuggeltem Code tolle Möglichkeiten, böse zu sein. Deshalb darf JavaScript aus einer Domain (es zählt die Domain der html-Seite) keine Objekte aus einer anderen Domain nachladen um sie weiter zu bearbeiten (z.B. um ein gpx zu lesen und daraus Striche per JavaScript zu malen) oder womöglich dort eingebetteten Code auszuführen. Für solche Dateien gilt die “Same Origin Policy”.

Die Browserhersteller machen in dieser Situation einen Kompromiss:

  • fremde Bilder laden ist ok

  • fremde JavaScript-Bibliotheken im html laden ist auch ok (sonst ginge kein OL oder Google-API einzubinden)

  • fremde Seiten samt JavaScript in einem iFrame darstellen ist ok

  • fremde Inhalte in ein Script laden ist nicht ok

Firefox hat diese Einschränkungen auch auf lokale Dateien erweitert (die Überprüfung auf Domain, Protokoll und Port hat da ja keinen Sinn). Hauptgrund für die Einführung bei Mozilla waren Mailprogramme, die Mails oder Attachments als temporäre Datei speichern und dann Firefox aufrufen, um die darzustellen. Das JavaScript in diesen Dokumenten soll nicht die Platte lesen können oder dort Dateien aufmachen um sie heimlich ins Internet zu stellen.

Auch hier ein Kompromiss: Im gleichen Pfad darf man schon wieder lesen. Weil sonst könnte keiner seine gpx-in-openlayers ausprobieren…

Du setzt Dich der Gefahr aus, dass lokale Dokumente per JavaScript die Platte auslesen. Kommt vermutlich selten vor, aber wer weiss schon auf welche Weise z.B. Mozilla Thunderbird html-Inhalte darstellt und was der Thunderbird mit dort eingebundenem JavaScript anstellt (nur als Beispiel, ich vermute mal, dass jeder vernünftige Mailer JS nicht ausführt). Oder denk an ein interessant klingendes Programm, das Dir nach dem Runterladen eine “install_readme.html” unter die Maus hält.

Grüße, Max

Hallo @max,

vielen dank für Deine Ausführungen. Wie läßt sich aber das von ajoessen erklären. Das deckt sich nicht mit meinen Untersuchungen… Sehr seltsam?

MfG
Achim

Ps: ==> http://kb.mozillazine.org/Security.fileuri.strict_origin_policy Dieser Link sagt eigentlich das aus, was ich festgestellt habe. das widerspricht ajoessen Feststellungen…oder?

Hallo womisa,

ich glaub ich weiß warum:

Die HTML ist bei mir standardmäßig mit K-Meleon verknüpft, und da gibt es diese Zeile nicht in about:config.
Deshlab seh ich immer, was ich will :wink:

Der Firefox malt die gpx nicht, wenn sie auf der anderen Platte liegt; gibt aber bei mir auch keien Fehlermeldung aus (hab ich eventuell anderswo unterdrückt).

gruß,
ajoessen

Hallo

so nachdem man die Tücken kennt kann ich ganz gut damit leben. Ein Frage noch zwar “Off Topic”: kann man bei der lokalen Verarbeitung mit Javascript auf die Aufrufparameter zugreifen um Karten zu selektieren und wie selektiert man in Javascript die MAP
==> zb: file:///E:/aGpxViewer/WmsGpx.html?Karte=TopoKarte

geht sowas, wenn ja wie?

MfG
Achim

Ps: Übrigens habe ich für meine “Lokalen” Anforderungen mal “Maperitive” ausprobiert. Das scheint mir unter Windows eine gute Alternative für mich zu sein.

Jup, alle Widersprüche aufgeklärt… :wink:

Du könntest die URL zerlegen. Erst am “?” in Pfad und Parameter trennen, dann den Parameterteil an den “&” auftrennen und die einzelnen Bestandteile dann am “=” in Bezeichnung und Wert. So ungefähr (und da noch massig Fehlerabfragen dazu):

p1=document.URL.split("?")[1];
p2=p1.split("&");
test=karte="";
for(i=0;i<p2.length;i++){
 p3=p2[i].split("=");
 if(p3[0] == "karte") karte=p3[1];
 if(p3[0] == "test")  test=p3[1];
}
alert("Karte:"+karte+" Test:"+test);

p1[0] ist der Pfad, p1[1] sind alle Parameter zusammen in einer Zeichenkette, p2 ist ein Array aus einzelnen (Bezeichnung=Wert)-paaren, p3 ist das i-te (Bezeichnung=Wert)-Paar.