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?
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?
Odpowiedzi:
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: jsonp
w $.ajax
żądaniach).
Minusem jest to, że wymaga dostawcy interfejsu API do obsługi JSONP.
Flash może uzyskiwać dostęp do treści między domenami, o ile docelowa witryna ma crossdomain.xml
w 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.
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.
Internet Explorer ma żądanie między domenami
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.
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ź.