2010-10-01 14 views

Respuesta

18

La respuesta corta es que no puede, porque las solicitudes AJAX están limitadas al mismo (sub) dominio y puerto por el Same Origin Policy.

Las mismas restricciones se aplican a los elementos iframe: No se puede crear un iframe apuntando a la página externa, y tomar su HTML desde allí.

La forma habitual es utilizar un script del lado del servidor (escrito, por ejemplo, en PHP) que sirve como proxy: recupera el contenido del sitio externo y lo devuelve a JavaScript. Tendrá que ejecutarse en el mismo dominio que la página.

Obviamente, utilizando esta solución, las referencias relativas a URL, imágenes, hojas de estilo y cosas por el estilo (por ejemplo, ../images/image.gif) ya no funcionarán, ya que están fuera de contexto en su página. Si eso es un problema en su situación es imposible de decir. Una solución para eso puede estar usando un <base> tag.

+0

Podemos hacerlo. Pruebe esto: http://crossorigin.me/ –

+0

Aquí hay un blog sobre lo mismo: https://blog.codepen.io/2015/07/10/crossorigin-me/ –

+1

@KushalJayswal que es exactamente el tipo de "servidor" guión lateral que sirve como proxy "que mencioné. Viene con una multitud de problemas, uno de los cuales se ilustra por el hecho de que actualmente el sitio está fuera de línea, probablemente debido a una gran carga. Para cualquier tipo de uso profesional, ese servicio está muy lejos de "podemos hacerlo" –

5

Usted necesita jQuery $.get

http://api.jquery.com/jQuery.get/

Ejemplo: Aviar a los resultados de solicitar test.cgi con una carga útil adicional de datos (HTML o XML, dependiendo de lo que fue devuelto).

$.get("test.cgi", { name: "John", time: "2pm" }, 
    function(data){ 
    alert("Data Loaded: " + data); 
    }); 

Editar: esto solo funciona si su página está en el mismo dominio.

+0

No es posible: el código HTML del 'iframe' no será accesible para el JavaScript padre debido a la Política de mismo origen –

+0

entonces hay no es una solución en absoluto :) – Stefanvds

3

Puede usar $ .ajax o $ .get para hacer una llamada a una URL en su propio dominio y luego usar el lenguaje del lado del servidor que está utilizando para recuperar el HTML y luego devolverlo.

Son dos solicitudes HTTP en lugar de una, pero solucionará su problema.

También puede almacenar en caché el HTML de sitios externos en su código backend para que una solicitud de Javascript no siempre dé como resultado dos solicitudes HTTP, por supuesto, todo depende de la frecuencia con la que cambiará el HTML que desea capturar.

Un ligero giro en lo anterior sería tener una tarea en segundo plano ejecutándose en su servidor que recupera el HTMl externo cada X segundos y lo guarda localmente. Las solicitudes a su dominio desde su JS solo recogen la última copia de su servidor. Eso significa que su solicitud JS no se ralentiza esperando otra solicitud HTTP externa.

0

Todos los navegadores comunes no permiten que las llamadas a Javasript accedan a páginas con otro (sub) dominio debido a la misma política de origen. La única forma de evitar esto es configurar algún tipo de "proxy" en su propio servidor (por ejemplo, un script php) que se ejecute bajo el mismo Dominio, obtenga la Información que desee de un tercer recurso y los imprima.

0

Puede agregar un PHP o cualquier otro idioma del lado del servidor a su sitio que podría actuar como un proxy para su script para buscar la página html.

A continuación, puede llamar a su proxy del lado del servidor con la url usando Ajax que le devolverá el HTMl de esa página.

Cuestiones relacionadas