Comunidad de diseño web y desarrollo en internet online

Error al acceder a la propiedad "document"

Citar            
MensajeEscrito el 13 Feb 2013 04:14 pm
Hola a todos, tengo un problemilla un poco raro y no sé a que se debe. El tema es que cuando trabajo en local NO me da el error y cuando trabajo en producción SÍ me da el error.
El error dice:
Error: Permission denied to access property 'document'

Código Javascript :

if (parent.document.getElementById('myName') != null) {


Alguien sabe a que se puede deber?
Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Feb 2013 02:37 am
...es que la condicion seria simplemente asi...

Código Javascript :

if (document.getElementById('myName')) {

}


...usas parent cuando estas dentro de un frame o iframe y queres acceder a un elemento del nodo padre, en este caso, del document principal...

...luego no es necesario que verifiques si es distinto de NULL...En Javascript los siguientes valores son falsos, entonces no es necesario comprobar...

NULL
undefined
NaN
0
"" (string vacio)

Por ipraetoriux

18 de clabLevel



Genero:Masculino  

Ingeniero en Software

chrome
Citar            
MensajeEscrito el 14 Feb 2013 09:12 am
Hola ipraetoriux, gracias por tu respuesta, pero creo que no nos hemos entendido.
Voy a poner un poco de código:
Página1.html:

Código HTML :

<body>
  <input type="text" id="myName" />
  <iframe src="página2.html" id="iframePg2"/>
</body>

Página2.html:

Código Javascript :

if (parent.document.getElementById('myName') != null) {
  parent.document.getElementById('myName').value = "Palacio";
}

El problema está en que Página1.html y Página2.html NO están en el mismo dominio, sino que forman parte de distintas páginas web y supongo que es por esto que no me deja acceder.
¿Hay alguna forma de solucionarlo?
Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Feb 2013 12:44 pm
No.
Estás queriendo violar la protección contra "Cross Site Scripting". Un script solo es válido en el dominio en el que se ejecuta y no puede acceder al DOM de otro sitio en otro dominio.

¿Estás seguro que lo que quieres hacer no se puede resolver con Ajax?.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 14 Feb 2013 01:09 pm
Hola DriverOp, gracias por tu aporte.
Pero, podrías hacerme un mini ejemplo de lo que propones? o o estoy pillando.

Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Feb 2013 02:48 pm
Es que no sé qué quieres hacer exactamente.

Lo que entiendo (corrígeme si me equivoco) es que quieres meter contenido de un sitio en otro sitio y tú tienes control sobre el sitio contenido pero no sobre el contenedor. Es decir, el sitio A contiene en un iframe al sitio B, tú tienes el control del sitio B pero no del A.

Lo otro es qué quieres lograr del sitio A. Porque tal vez ni siquiera sería necesario manipular del DOM, pero claro, necesito más detalles.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 14 Feb 2013 03:10 pm
Hola DriverOp, vas bien, intento explicarme mejor:
Tenemos 2 sitios A (contenedor) y B (contenido) y tengo control sobre B, pero no sobre A.
En A tengo un iframe que contiene B
En B tengo unas funciones Javascript que quiero que recojan datos de campos de A, es decir, si en A hay un campo "myName" quiero desde B recoger el valor de dicho campo. para recoger el valor, en B tengo untimer que ejecuta una función javascript que hace lo siguiente:

Código Javascript :

if (parent.document.getElementById('myName') != null) {
  parent.document.getElementById('myName').value = "Palacio";
}

Pero claro, me da error.
Me he explicado? Puedes ayudarme?

Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Feb 2013 07:16 pm
Lo lamento por ti pero lo que quieres hacer, no se puede hacer. Estás queriendo acceder al DOM de un dominio diferente y esto está explícitamente bloqueado por los navegadores (imagina qué fácil sería extraer contraseñas...).

O pides la colaboración de los dueños del sitio A, o bién accede al sitio A desde el servidor B y parsea los datos que te interesen (usando un lenguaje del lado del servidor, claro).

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 19 Feb 2013 11:24 am
Hola DriverOp, malas noticias las tuyas ... :(
Se me ocurre otra opción, desde A puedo acceder a alguna función de Javascript de B?
Estoy pensando que quizás una función Javascript en A, podría llamar a una función Javascript en B y pasarle los datos que se necesitan. Es esto posible?

Muchas graicas

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Feb 2013 02:52 pm
Nop. Tampoco. Se aplican las mismar restricciones.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 19 Feb 2013 04:42 pm
Hola, he estado investigando y he visto que en los navegadores que soportan HTML5 hay una forma de saltarse esta restricción:
Pagina A (http://www.otherdomain.com):

Código HTML :

<iframe id="myFrame" src="http://www.mydomain.com/myPage.aspx"></iframe>

Código Javascript :

function dataToIFrame() {
            var o = document.getElementById('myFrame');
            o.contentWindow.postMessage('Hello world', 'http://www.otherdomain.com');
}

Pagina B (http://www.mydomain.com):

Código Javascript :

function receiver(event) {
            alert(event.data + ": " + event.origin);//"Hello world: http://www.otherdomain.com
}
window.addEventListener('message', receiver, false);

Lo caul es un primer paso, pero yo necesito algo diferente, ya que la función reciever debería recibir N datos y no tengo control sobre A para poder definir que datos quiero que me devuelva.
Alguna idea?

Muchas gracias

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 19 Feb 2013 08:39 pm
Lo que ocurre es que para que puedas usar postmessage, el servidor que recibe el mensaje, debe tener CORS habilitado y permiso habilitado para el dominio que envía el mensaje.

Lamentablemente, mi amigo, cualquier solución que quieras implementar desde JS acabarás necesitando el permiso del servidor A.

Ahora me asalta la pregunta ¿qué tiene ese otro servidor que necesitas tanto?.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 20 Feb 2013 09:49 am
Muchas gracias DriverOp, tus indicaciones me han ayudado mucho a comprender.

Por Palacio

Claber

198 de clabLevel



 

firefox
Citar            
MensajeEscrito el 22 Feb 2013 09:38 am
Siento volver al tema, pero, si desde B, cuando pulso en un botón, quiero redimensionar el tamaño del iframe que está en A y contiene mi página, puedo hacerlo?

Muchas graccias

Por Palacio

Claber

198 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.