ejemplos ejemplo bootstrap atributos javascript iframe cors

javascript - ejemplo - iframe responsive



Acceda a la URL padre del iframe (12)

De acuerdo, tengo una página y en esta página tengo un iframe. Lo que debo hacer es buscar en la página iframe cuál es la URL de la página principal.

He buscado y sé que esto no es posible si mi página iframe está en un dominio diferente, ya que es una secuencia de comandos entre sitios. Pero en todas partes que he leído dice que si la página del iframe está en el mismo dominio que la página principal, debería funcionar si lo hago, por ejemplo:

parent.document.location

parent.window.document.location

parent.window.location

parent.document.location.href

... u otros combos similares, ya que parece haber múltiples formas de obtener la misma información.

De todos modos, este es el problema. Mi iframe está en el mismo dominio que la página principal, pero no está en el mismo dominio SUB. Entonces, por ejemplo, tengo

http: // www.mysite.com/pageA.html

y luego mi URL iframe es

http: // qa-www.mysite.com/pageB.html

Cuando intento tomar la URL de la página pageB.html (la página iframe), sigo obteniendo el mismo error de acceso denegado. Entonces, parece que incluso los subdominios cuentan como scripts de sitios cruzados, ¿es correcto o estoy haciendo algo mal?


Acabo de descubrir una solución para este problema que es muy simple, y aún así no he encontrado ninguna discusión en ningún lugar que lo mencione. Requiere control del marco principal.

En su iFrame, supongamos que quiere este iframe: src = "http://www.example.com/mypage.php"

Bueno, en lugar de HTML para especificar el iframe, use un javascript para construir el HTML para su iframe, obtenga la url padre a través de javascript "en tiempo de compilación" y envíela como un parámetro url GET en la cadena de consulta de su objetivo src, como asi que:

<script type="text/javascript"> url = parent.document.URL; document.write(''<iframe src="http://example.com/mydata/page.php?url='' + url + ''"></iframe>''); </script>

A continuación, busque una función de análisis url de JavaScript que analice la cadena url para obtener la variable url que está buscando, en este caso es "url".

Encontré un gran analizador de cadenas de URL aquí: http://www.netlobo.com/url_query_string_javascript.html


El problema con PHP $ _SERVER [''HTTP_REFFERER''] es que proporciona la url de la página totalmente calificada de la página que lo llevó a la página principal. Eso no es lo mismo que la página principal, en sí misma. Peor aún, a veces no hay http_referer, porque la persona ingresó el url de la página principal. Entonces, si llego a su página principal desde yahoo.com, entonces yahoo.com se convierte en el http_referer, no en su página.


Estás en lo correcto. Los subdominios todavía se consideran dominios separados cuando se usan iframes. Es posible pasar mensajes usando postMessage(...) , pero otras API de JS son intencionalmente inaccesibles.

También es posible obtener la URL dependiendo del contexto. Ver otras respuestas para más detalles.


Esto me funcionó para acceder a la url de ifrme src.

window.document.URL


He encontrado en los casos donde $_SERVER[''HTTP_REFERER''] no funciona (te estoy mirando, Safari), $_SERVER[''REDIRECT_SCRIPT_URI''] ha sido una copia de seguridad útil.


He tenido problemas con esto. Si usa un lenguaje como php cuando su página carga por primera vez en el iframe agarre $_SERVER[''HTTP_REFFERER''] y $_SERVER[''HTTP_REFFERER''] en una variable de sesión.

De esta forma, cuando la página carga en el iframe, usted conoce el url padre completo y la cadena de consulta de la página que lo cargó. Con la seguridad de navegador cruzado es un poco dolor de cabeza contar con window.parent cualquier cosa si usted dominios diferentes.


No pude obtener la solución anterior para el trabajo pero descubrí que si configuro el iframe scr con, por ejemplo, http:otherdomain.com/page.htm?from=thisdomain.com/thisfolder , podría, en el iframe extraer thisdomain.com/thisfolder usando el siguiente javascript:

var myString = document.location.toString(); var mySplitResult = myString.split("="); fromString = mySplitResult[1];


Obtiene todas las funciones de marco flotante principal y HTML

var parent = $(window.frameElement).parent(); //alert(parent+"TESTING"); var parentElement=window.frameElement.parentElement.parentElement.parentElement.parentElement; var Ifram=parentElement.children; var GetUframClass=Ifram[9].ownerDocument.activeElement.className; var Decision_URLLl=parentElement.ownerDocument.activeElement.contentDocument.URL;


Para páginas en el mismo dominio y subdominio diferente, puede establecer la propiedad document.domain través de javascript.

Tanto el marco padre como el iframe necesitan establecer su document.domain a algo que es común entre ellos.

es decir, www.foo.mydomain.com y api.foo.mydomain.com podrían usar foo.mydomain.com o simplemente mydomain.com y ser compatibles (no, no se pueden establecer ambos en com , por razones de seguridad. ..)

Además, tenga en cuenta que document.domain es una calle de sentido único. Considere ejecutar las siguientes tres instrucciones en orden:

// assume we''re starting at www.foo.mydomain.com document.domain = "foo.mydomain.com" // works document.domain = "mydomain.com" // works document.domain = "foo.mydomain.com" // throws a security exception

Los navegadores modernos también pueden usar window.postMessage para hablar sobre los orígenes, pero no funcionará en IE6. https://developer.mozilla.org/en/DOM/window.postMessage


Sí, no se permite el acceso a la URL de la página principal si el iframe y la página principal no están en el mismo (sub) dominio. Sin embargo, si solo necesita la URL de la página principal (es decir, la URL del navegador), puede intentar esto:

var url = (window.location != window.parent.location) ? document.referrer : document.location.href;

Nota:

window.parent.location está permitido; evita el error de seguridad en el OP, que se produce al acceder a la propiedad href : window.parent.location.href provoca "Bloqueado un marco con origen ..."

document.referrer refiere a "el URI de la página que enlazó a esta página". Es posible que esto no devuelva el documento que lo contiene si alguna otra fuente es lo que determinó la ubicación del iframe , por ejemplo:

  • Contenedor iframe @ Dominio 1
  • Envía el iframe infantil al dominio 2
  • Pero en el iframe infantil ... el Dominio 2 redirige al Dominio 3 (es decir, para la autenticación, tal vez SAML), y luego el Dominio 3 dirige al Dominio 2 (es decir, a través del envío de formulario (), una técnica SAML estándar)
  • Para el iframe hijo, el document.referrer será el Dominio 3 , no el Dominio 1 que lo contiene.

document.location refiere a "un objeto Location, que contiene información sobre la URL del documento"; presumiblemente el documento actual , es decir, el iframe actualmente abierto. Cuando window.location === window.parent.location , la href del iframe es la misma que la href del padre que la contiene.


Si su iframe proviene de otro dominio, (dominio cruzado), simplemente necesitará usar esto:

var currentUrl = document.referrer;

y - ¡aquí tienes la url principal!


var url = (window.location != window.parent.location) ? document.referrer: document.location;

Descubrí que el ejemplo anterior sugerido anteriormente funcionaba cuando el script se estaba ejecutando en un iframe; sin embargo, no recuperaba la url cuando el script se ejecutaba fuera de un iframe; se requería un ligero ajuste:

var url = (window.location != window.parent.location) ? document.referrer: document.location.href;