Jak mashupy działają z polityką tej samej organizacji?

11

Jeśli JavaScript ma dostęp tylko do skryptów z tej samej domeny, w jaki sposób strona internetowa może tworzyć mashupy, które muszą czytać i modyfikować zawartość z innej domeny?

Jack Richardson
źródło

Odpowiedzi:

7

Rozwiązania dla różnych przeglądarek

JSONP

Jeśli interfejs API, do którego próbujesz uzyskać dostęp, obsługuje JSONP , musisz tylko podać nazwę funkcji javascript w swoim żądaniu, wówczas JSONP zwraca javascript, myfunc({the:data});który można uruchomić jak zwykły javascript, dlatego należy utworzyć nowy <script src="www.website.com/somecall?jsonp=myfunc">tag, aby „wyślij zapytanie” (jQuery robi to automatycznie, jeśli używasz type: jsonpw $.ajaxżądaniach).

Minusem jest to, że wymaga dostawcy interfejsu API do obsługi JSONP.

Lampa błyskowa

Flash może uzyskiwać dostęp do treści między domenami, o ile docelowa witryna ma crossdomain.xmlw katalogu głównym plik, który mówi, że zezwala na to, co zwykle ma miejsce w przypadku serwerów udostępniających interfejs API.

Minusem jest to, że wymaga Flasha w przeglądarce użytkownika i że witryna, z której otrzymujesz dane, musi mieć plik crossdomain.xml, który umożliwia żądania między domenami.

Skrypt po stronie serwera w tej samej nazwie domeny

Języki po stronie serwera, takie jak PHP, nie mają ograniczeń BS dla tej samej domeny, więc możesz mieć skrypt działający jako serwer proxy (np. Pobierz przez jedno z rozszerzeń http, takich jak cURL).

Dodatkową korzyścią jest to, że możesz wyczyścić dane (lub nawet zmiksować wiele źródeł) na serwerze, zanim prześlesz je na swoją stronę internetową / javascript, abyś mógł nawet wyodrębnić tylko przydatną część danych, co jest przyjemne, gdy robisz mobilną aplikację internetową gdzie przepustowość może być problemem.

Minusem jest to, że wszystkie żądania muszą przejść przez serwer, co zwiększa obciążenie serwera.

Jednak zaletą jest to, że będzie działać z dowolnym zasobem, ponieważ nie wymaga on, aby cel obsługiwał crossdomain lub jsonp. Więc jeśli nic innego nie zadziała, to by to działało.


Rozwiązania specyficzne dla niektórych przeglądarek

Internet Explorer

Internet Explorer ma żądanie między domenami

Firefox

Firefox 3.5+ ma standard udostępniania między źródłami , ale wymaga zasobu, do którego próbujesz uzyskać dostęp, aby zawierał specjalne nagłówki, np. W PHP:

header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");

Obsługuje to także kilka innych głównych przeglądarek , więc jeśli nie potrzebujesz obsługi starych przeglądarek i jeśli możesz uzyskać zasoby, do których próbujesz uzyskać dostęp, aby wysłać te nagłówki, może to być najlepszy wybór, w przeciwnym razie po stronie serwera skrypt byłby moją rekomendacją.


Firefox ma również ustawienia użytkownika capability.policy.default.XMLHttpRequest.open, ale nie liczyłbym, że użytkownik zmieni ustawienie w swojej przeglądarce.

dzikie piki
źródło
0

Możesz do tego użyć interfejsu API (innej domeny). Twój Javascript wywoła plik PHP (lub inny plik skryptu), który znajduje się na twoim serwerze internetowym (domenie), który wywoła API (innej domeny używającej CURL) i otrzyma odpowiedź.

Harish Kurup
źródło
Ta odpowiedź nie musi być tak konkretna w odniesieniu do technologii stosowanej na serwerze.
funkybro
@funkybro tak, to był tylko przykład ... nic konkretnego ...
Harish Kurup