Si Javascript solo puede acceder a los scripts del mismo dominio, ¿cómo puede un sitio web crear mashups que deben leer y modificar el contenido de otro dominio?
fuente
Si Javascript solo puede acceder a los scripts del mismo dominio, ¿cómo puede un sitio web crear mashups que deben leer y modificar el contenido de otro dominio?
Si la API a la que intenta acceder es compatible con JSONP , solo tiene que proporcionar un nombre de función de JavaScript en su solicitud, entonces JSONP devuelve JavaScript como el myfunc({the:data});
que puede ejecutar como un JavaScript normal, por lo que crearía una nueva <script src="www.website.com/somecall?jsonp=myfunc">
etiqueta para "enviar una solicitud" (jQuery hace esto automáticamente si lo usa type: jsonp
en las $.ajax
solicitudes).
La desventaja es que requiere que el proveedor de la API admita JSONP.
Flash puede acceder a contenidos de dominios cruzados siempre que el sitio web de destino tenga un crossdomain.xml
archivo en su raíz que diga que lo permite, que suele ser el caso en los servidores que proporcionan una API).
La desventaja es que requiere Flash en el navegador del usuario y que el sitio web del que obtiene datos debe tener un crossdomain.xml que permita solicitudes de dominios cruzados.
Los lenguajes del lado del servidor como PHP no tienen restricciones de BS del mismo dominio, por lo que podría tener un script que actúe como proxy (por ejemplo, descargar a través de una de las extensiones http como cURL).
El beneficio adicional es que puede limpiar los datos (o incluso combinar varias fuentes) en el servidor, antes de reenviarlos a su página web / javascript, por lo que incluso puede extraer solo la parte útil de los datos, lo cual es bueno cuando se hace una aplicación web móvil donde el ancho de banda puede ser un problema.
La desventaja es que todas las solicitudes tienen que pasar a través de su servidor, por lo que aumenta la carga en su servidor.
Sin embargo, el beneficio es que funcionaría con cualquier recurso ya que no requiere que el destino admita crossdomain o jsonp. Entonces, si nada más funciona, esto funcionaría.
Internet Explorer tiene solicitud de dominio cruzado
Firefox 3.5+ tiene el estándar de intercambio de origen cruzado , pero requiere el recurso al que está intentando acceder para incluir encabezados especiales, por ejemplo, en PHP:
header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");
Algunos otros navegadores principales también admiten esto , por lo que si no necesita admitir navegadores antiguos y si puede obtener los recursos a los que intenta acceder para enviar esos encabezados, esta puede ser su mejor opción, de lo contrario, el lado del servidor El guión sería mi recomendación.
Firefox también tiene una configuración de usuario capability.policy.default.XMLHttpRequest.open
, pero no cuento con que el usuario cambie una configuración en su navegador.
Puede usar API (de otro dominio) para eso. Su Javascript llamará al archivo PHP (u otro archivo de script) que esté en su servidor web (su dominio), que llamará a la API (de otro dominio usando CURL) y recibirá la respuesta.