Tengo algunos problemas con una aplicación que integra sharepoint, servicios de informes SQL y un montón de formularios personalizados que se crean utilizando ASP.NET MVC.

Asumiendo que mis servidores son los siguientes;

  • MUSGO
  • SSRS
  • Formularios personalizados

En MOSS, mi portal necesita ocasionalmente abrir un formulario personalizado para capturar la entrada del usuario. Lo hice usando un cuadro de diálogo jQuery (usando Boxy), que enmarca el formulario personalizado y pasa la url del portal. Cuando finaliza el formulario personalizado, navega por la ventana principal (el portal MOSS) a la URL pasada, lo que efectivamente actualiza la página.

Esto funcionaba bien hasta que agregamos la complejidad de SSRS.

Ahora en MOSS, tengo un informe que enumera algunos datos, pero el elemento web del visor de informes SSRS parece encuadrar el contenido del informe, lo que significa que los hipervínculos del informe no pueden pedirle al padre que superponga los mismos diálogos (ya que es cruzado dominio) y si fuera a realizar la superposición en sí, simplemente superpondría el iframe.

Perdón por la publicación larga, yendo al grano: esta es solo una aplicación de intranet interna. ¿Es posible permitir scripts de dominio cruzado de alguna manera para que todos los cuadros de diálogo emergentes puedan controlarse desde javascript dentro del portal sharepoint y SSRS y mis formularios personalizados solo pueden invocar métodos javascript en el padre?

Preferiblemente, no quisiera tener que hacer la configuración en el navegador del cliente para permitir que esto suceda, ya que tendría que implementar ese cambio en todas las máquinas dentro del estado, que es un número significativo.

Gracias de antemano, cerveza disponible para cualquiera que pueda resolver mis problemas;)

Saludos, Tony

1
deepcode.co.uk 20 oct. 2009 a las 13:05

3 respuestas

La mejor respuesta

IE8, Firefox 3, reciente Opera y Safari / Chrome admiten postMessage que permite que las páginas cooperantes en diferentes dominios se comuniquen entre sí:

http://ajaxian.com/archives/cross-window-messaging-with-html-5-postmessage

Si está atascado con navegadores antiguos, tiene pocas opciones. Lo más limpio es enviar todo lo que necesita comunicarse entre sí a través del mismo proxy, aunque en la situación del OP parece que esto no es posible.

El siguiente paso más limpio es usar la instalación de dominio cruzado de Flash.

Otra opción es xssinterface, que envuelve postMessage cuando está disponible y usa un poco de vudú con cookies y encuestas donde no lo es

La única otra opción es usar iframes ocultos: para enviar un mensaje a una página, cambiar la ubicación del iframe a uno en el dominio de la página de destino y sondear en la página de destino, pero nuevamente creo que la representación en el caso del OP lo hace inviable.

4
Andrew Duffy 20 oct. 2009 a las 11:15

Finalmente resolví estos problemas usando iframes ocultos como se sugiere. Publiqué un artículo en mi blog con más detalles e inserté el código en codeplex:

http://www.deepcode.co.uk/2009/11/overcoming-cross-domain-issues-between.html

0
deepcode.co.uk 16 nov. 2009 a las 16:00

Hay otra opción además de las que ofrece Andrew. Puede inyectar dinámicamente etiquetas de script en el DOM, donde el atributo src puede apuntar a un archivo javascript en cualquier dominio.

En jQuery lo logras especificando "jsonp" como el tipo de datos para la solicitud ajax. Puede leer más sobre este enfoque aquí:

http://blog.ropardo.ro/2009/09/23/cross-domain-ajax-calls/

0
Matt Baker 21 oct. 2009 a las 00:55