Ich mache ein HTML-Widget für Websites. Sagen wir, es wird aktuelle Aktienindizes anzeigen.
Kurz gesagt, ein beliebiger Website-Besitzer nimmt einen Code-Schnipsel von mir und fügt ihn in seine Website ein http://website.com/index.html . Wenn ein beliebiger Benutzer die http://website.com/index.html Mein Code sendet eine Anfrage an meinen Server (provider.com), der die notwendigen Operationen durchführt und die Informationen an den Browser des Benutzers zurückgibt. Wenn die Antwort angekommen ist, sieht der Benutzer den entsprechenden Aktienwert auf http://website.com/index.html .
In index.html könnte der Dienst wie folgt aufgerufen werden
<script type="text/javascript" src="provider.com/service.js"> </script>
<div id="target_area"></div>
<script type="text/javascript">
service.show("target_area", options);
</script>
Das Problem liegt nun in der Politik des gleichen Ursprungs : Ich kann nicht einfach eine Ajax-Anfrage von website.com an provided.com senden und HTML zurückgeben, um es in die Webseite des Kunden einzubetten. Ich sehe mehrere Lösungen, die ich unten aufliste, aber keine befriedigt mich ganz. Ich frage mich, ob Sie etwas vorschlagen können, vor allem, wenn Sie einige einschlägige Erfahrung haben.
1) iframe, schlicht und einfach. Nachteil: muss feste Abmessungen haben + dumme Scrollbalken, die in einigen Browsern erscheinen. Kann mit Javascript behoben werden, aber all diese Browser-spezifischen Basteleien klingen nicht gut für mich.
2) JSONP . Problem: Es kann nicht der ganze html-Block zurückgegeben werden, sondern nur die Daten. Dann muss ich auf der Browserseite Javascript verwenden, um die Daten in ein Html-Snippet einzubetten, das statisch in index.html platziert ist. Das klingt nicht gut, denn das Datenformat ist nicht sehr einfach und kann sich später sogar ändern.
3) Verwenden Sie einen versteckten Iframe, um Ajax-Anfragen zu stellen. Ein bisschen kompliziert, aber klingt wie ein Weg zu gehen.
Nun, das sind meine Gedanken zu diesem Thema. Gibt es bessere Möglichkeiten?
Übrigens habe ich auch versucht, einige vorhandene Widgets zu überprüfen, aber ich habe nicht viele nützliche Informationen gefunden.
Alle in diesem Text verwendeten Domänennamen sind fiktiv und jede Ähnlichkeit ist rein zufällig :)
Update Funktioniert jetzt, wie von SLaks vorgeschlagen! Wenn jemand an den Details interessiert ist, muss die Antwort-HTML wie folgt nachbearbeitet werden (ruby)
body = body.gsub '"', '\\"'
body = body.gsub /\n/, '\\n';
body = body.gsub '/', '\\/';
body = params[:callback] + '("' + body + '");';
Danach können Sie jquery mit der Option "dataType: 'jsonp'" verwenden.