Pregunta

Si bien las secuencias de comandos entre sitios generalmente se consideran negativas, me he encontrado con varias situaciones en las que son necesarias.

Recientemente estuve trabajando dentro de los límites de un sistema de gestión de contenidos muy limitante.Necesitaba incluir el código de la base de datos dentro de la página, pero el servidor de alojamiento no tenía nada utilizable disponible.Configuré un par de scripts básicos en mi propio servidor, originalmente pensando que podría usar AJAX para importar el contenido de mis scripts directamente a la plantilla del CMS (conservando así imágenes dinámicas, elementos de menú, CSS, etc.).Me equivoqué.

Debido a las limitaciones de XMLHttpRequest objetos, no es posible capturar contenido de un dominio diferente.Así que pensé marco flotante - Aunque no soy fanático de los marcos, pensé que podría crear un marco que coincidiera con el ancho y alto del contenido para que pareciera nativo.Nuevamente, fui bloqueado por "protecciones" de secuencias de comandos de sitios cruzados. Mientras que podría cargar un archivo remoto en el marco flotante, no pude ejecutar JavaScript para modificar su tamaño ni en la página host ni dentro de la página cargada.

En este escenario particular, no pude apuntar un subdominio a mi servidor. Tampoco pude crear un script en el servidor CMS que pudiera enviar contenido desde mi servidor, así que mi último pensamiento fue usar un JavaScript remoto.

Un JavaScript remoto funciona.Se rompe cuando el usuario tiene JavaScript deshabilitado, lo cual es una desventaja;pero funciona.El "problema" que estaba teniendo al usar JavaScript remoto era que tenía que usar la función JS document.write() para generar cualquier contenido.Cualquier salida que no sea JS provoca errores de script.Además de usar document.write() para cada línea, también debe asegurarse de que se escape el contenido; de lo contrario, terminará con más errores de script.

Mi solución fue la siguiente:

Mi secuencia de comandos recibió un parámetro GET ("página") y luego buscó el archivo ({$page}.php) y leer el contenido en una variable.Sin embargo, tuve que usar técnicas incómodas de almacenamiento en búfer para poder ejecutar los scripts incluidos (para cosas como la interacción de la base de datos) y luego eliminar el contenido final de todos los caracteres de salto de línea (\n) seguido de escapar de todos los caracteres requeridos.El resultado final es que mi script original (que genera JavaScript) accede a scripts aparentemente "estándar" en mi servidor y convierte su salida estándar a JavaScript para mostrarlo dentro de la plantilla CMS.

Si bien esta solución funciona, parece que puede haber una mejor manera de lograr lo mismo.¿Cuál es la mejor manera de hacer que las secuencias de comandos entre sitios funcionen específicamente con el fin de incluir contenido de un dominio completamente diferente?

¿Fue útil?

Solución

Tienes tres opciones:

  1. Crear un secuencia de comandos proxy del lado del servidor.
  2. Cree un script remoto para leer en HTML dinámico remoto.Utilice una biblioteca como jQuery para hacer esto más fácil.Puedes usar el función de carga para inyectar HTML donde sea necesario. EDITAR Lo que originalmente quise decir, por ejemplo, número 2, fue utilizar JSONP, que requiere que el script del lado del servidor reconozca la "devolución de llamada =?" Param.

  3. Usar una Proxy Flash del lado del cliente y configurar un dominio cruzado.xml archivo en la raíz web de su servidor.

Otros consejos

Personalmente llamaría a ese otro dominio en el servidor y obtenga y analice los datos allí para usarlos en su página.De esa manera, evitará cualquier problema y obtendrá el poder de un lenguaje/plataforma del lado del servidor para obtener y analizar los datos.

No estoy seguro de si eso funcionaría para su escenario específico... es difícil saberlo incluso con su descripción detallada...

Tu podrías intentar fácilXDM, al incluir muy poco código, puede pasar datos o llamadas a métodos entre documentos de diferentes dominios.

me he topado con eso Script de proxy del lado del servidor YDN antes.Dice que está diseñado para funcionar con las API de búsqueda de Yahoo.

¿Funcionará con cualquier dominio si simplemente elimina el código API de Yahoo?¿O necesitas reemplazarlo con el dominio con el que quieres que funcione?

Se puede acceder al contenido remoto del iframe mediante javascript local.

El servidor remoto sólo tiene que configurar el document.domain de la página.

P.ej:

El sitio A contiene un iframe con src='Site B/home.php'

home.php se ve así:

[php stuff]...[/php]
[script type='text/javascript']document.domain='Site A'[/script]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top