2009-09-30 19 views
5

Tengo una situación en una página donde un script en www.example.com/index.html abre home.example.com/foo .html en una ventana emergente. Cuando el usuario cierra la ventana emergente, quiero notificar a la página de apertura llamando a una función de Javascript (que hace algunas cosas con el DOM). Yo uso unbeforeunload así:Ventana de lectura.location después de establecer document.domain en IE (6)

// In index.html on www.example.com: 
    window.fn = function() { /* Perform stuff after foo.html has closed */ } 

    // In foo.html on home.example.com: 
    window.onbeforeunload = function() { 
     if (window.opener && window.opener.fn) 
      window.opener.fn(); 
    }; 

esto no funciona debido a que las páginas web se encuentran en diferentes dominios. Puedo establecer la propiedad document.domain para superar esto:

document.domain = "example.com"; 

Por desgracia, este no juega bien con el marco de aplicación web que utilizo en el lado foo.html (Apache Wicket), ya que incluye un script que hace algo como esto:

var src = (window.location.protocol == 'https:') ? something : other; 

al parecer, en IE6 *, cuando se establece el dominio de documentos, el objeto se convierte en location de sólo escritura, y así tratar de leer window.location.protocol tiros "Acceso denegado".

Entonces, mi pregunta es: ¿Cómo permito las llamadas a funciones de dominio entre dominios mientras sigo permitiendo que mis scripts lean el contenido del objeto location?

  • No puedo pasar por el servidor. (El trabajo realizado por la función que quiero llamar realmente no se reproduce de esa manera.)
  • No puedo leer la propiedad window.location.protocol antes de establecer document.domain y luego usar ese valor en la asignación condicional; Hacerlo me obligaría a reconstruir las bibliotecas del framework web, algo que no quiero hacer.

* Posiblemente en otras versiones de IE, también; no he verificado

Respuesta

1

¿Se puede usar jQuery? Hay un buen complemento que le permite hacer window.postMessage a través de un iframe en IE 6-8: http://benalman.com/code/test/js-jquery-postmessage/

Puede abrir su ventana emergente desde el iframe y pasar su objeto entre iframe y parent con postMessage.

+0

Esta es probablemente mi mejor oportunidad. Gracias. – gustafc

0

no puedo leer la propiedad window.location.protocol antes de document.domain y a continuación, utilizar ese valor en el condicional asignación; hacerlo me requeriría para reconstruir las bibliotecas del framework web , no es algo que quiera hacer.

no se puede leer window.location.protocol antes de establecer document.domain y establecer window.location.protocol una vez que se convierte en solo de escritura? ¿Eso requeriría una reconstrucción del marco también? es un truco, pero también lo es IE.

+0

Lamentablemente, no funciona. Sigue siendo de solo escritura incluso después de escribir en él. – gustafc

Cuestiones relacionadas