Wie viele andere habe auch ich das Netz durchforstet, ohne eine wirkliche Antwort zu finden :(
Trotzdem habe ich einen Bypass gefunden, der anderen helfen könnte. In meinem Fall habe ich die volle Kontrolle über meinen Webserver. In der Tat ist es Teil meiner Anwendung (siehe Endreferenz). Es ist einfach für mich, ein Skript zu meiner http-Antwort hinzuzufügen. Ich habe meinen httpd-Server so modifiziert, dass er ein kleines Skript in jede HTML-Seite einfügt. Ich füge nur eine zusätzliche "js script"-Zeile direkt nach dem Header ein, die eine bestehende Variable aus meinem Dokument in meinem Browser setzt [ich wähle den Ort], aber jede andere Option ist möglich. Während mein Server in nodejs geschrieben ist, habe ich keinen Zweifel, dass die gleiche Technik von PHP oder anderen verwendet werden kann.
case ".html":
response.setHeader("Content-Type", "text/html");
response.write ("<script>location['GPSD_HTTP_AJAX']=true</script>")
// process the real contend of my page
Jetzt wird dieses Skript auf jeder HTML-Seite, die von meinem Server geladen wird, vom Browser beim Empfang ausgeführt. Ich kann dann mit JavaScript leicht überprüfen, ob die Variable existiert oder nicht. In meinem Anwendungsfall muss ich wissen, ob ich JSON oder JSON-P-Profil verwenden sollte, um CORS-Problem zu vermeiden, aber die gleiche Technik kann für andere Zwecke verwendet werden [dh: wählen Sie zwischen Entwicklungs-/Produktionsserver, erhalten vom Server einen REST/API-Schlüssel, etc ....].
Im Browser müssen Sie nur die Variable direkt von JavaScript aus überprüfen, wie in meinem Beispiel, in dem ich sie benutze, um mein Json/JQuery-Profil auszuwählen
// Select direct Ajax/Json profile if using GpsdTracking/HttpAjax server otherwise use JsonP
var corsbypass = true;
if (location['GPSD_HTTP_AJAX']) corsbypass = false;
if (corsbypass) { // Json & html served from two different web servers
var gpsdApi = "http://localhost:4080/geojson.rest?jsoncallback=?";
} else { // Json & html served from same web server [no ?jsoncallback=]
var gpsdApi = "geojson.rest?";
}
var gpsdRqt =
{key :123456789 // user authentication key
,cmd :'list' // rest command
,group :'all' // group to retreive
,round : true // ask server to round numbers
};
$.getJSON(gpsdApi,gpsdRqt, DevListCB);
Für alle, die meinen Code überprüfen möchten: https://www.npmjs.org/package/gpsdtracking