inside create content asp.net javascript dom iframe

asp.net - create - ¿Cómo obtengo la ubicación actual de un iframe?



javascript get document in iframe (9)

He creado una aplicación básica de ingreso de datos que permite a los usuarios navegar por el contenido externo en iframe e ingresar datos rápidamente desde la misma página. Una de las variables de datos es la URL. Idealmente, me gustaría poder cargar la url actual de iframes en un cuadro de texto con javascript. Ahora me doy cuenta de que esto no va a suceder debido a problemas de seguridad.

¿Alguien ha hecho algo por el lado del servidor? o saber de cualquier navegador .Net en los controles del navegador. El objetivo final es simplemente dar al usuario un método sencillo para extraer la URL de la página que está viendo en el iframe. NO necesariamente tiene que ser un iframe, un navegador en el navegador sería ideal.

Gracias, Adam


¿Esto ayuda?

http://www.quirksmode.org/js/iframe.html

Solo probé esto en Firefox, pero si tienes algo como esto:

<iframe name=''myframe'' id=''myframe'' src=''http://www.google.com''></iframe>

Puede obtener su dirección usando:

document.getElementById(''myframe'').src

No estoy seguro si entendí tu pregunta correctamente pero de todos modos :)


HTA funciona como una aplicación de Windows normal.
Escribe código HTML y lo guarda como un archivo .hta.

Sin embargo, hay, al menos, un inconveniente: el navegador no puede abrir un archivo .hta; se maneja como un programa .exe normal. Por lo tanto, si coloca un enlace a un .hta en su página web, se abrirá un cuadro de diálogo de descarga en el que se le preguntará si desea abrir o guardar el archivo HTA. Si no es un problema para usted, puede hacer clic en "Abrir" y se abrirá una nueva ventana (que no tiene barras de herramientas, por lo que no hay un botón Atrás, ni una barra de direcciones, ni una barra de menú).

Necesitaba hacer algo muy similar a lo que deseaba, pero en lugar de frameset iframes , utilicé un frameset real.
La página principal debe ser un archivo .hta; el otro debería ser una página .htm normal (o .php o lo que sea).

Aquí hay un ejemplo de una página de HTA con 2 cuadros, donde el superior tiene un botón y un campo de texto, que contiene el segundo marco URL; el botón actualiza el campo:

frameset.hta

<html> <head> <title>HTA Example</title> <HTA:APPLICATION id="frames" border="thin" caption="yes" icon="http://www.google.com/favicon.ico" showintaskbar="yes" singleinstance="no" sysmenu="yes" navigable="yes" contextmenu="no" innerborder="no" scroll="auto" scrollflat="yes" selection="yes" windowstate="normal"></HTA:APPLICATION> </head> <frameset rows="60px, *"> <frame src="topo.htm" name="topo" id="topo" application="yes" /> <frame src="http://www.google.com" name="conteudo" id="conteudo" application="yes" /> </frameset> </html>

  • Hay una etiqueta HTA:APPLICATION que establece algunas propiedades para el archivo; es bueno tenerlo, pero no es obligatorio.
  • NECESITA colocar una application="yes" en las etiquetas de marcos. Dice que también pertenecen al programa y deben tener acceso a todos los datos (si no lo haces, los marcos seguirán mostrando el error que tenías antes).

topo.htm

<html> <head> <title>Topo</title> <script type="text/javascript"> function copia_url() { campo.value = parent.conteudo.location; } </script> </head> <body style="background: lightBlue;" onload="copia_url()"> <input type="button" value="Copiar URL" onclick="copia_url()" /> <input type="text" size="120" id="campo" /> </body> </html>

  • Debería notar que no usé ninguna función getElement para buscar el campo; en el archivo HTA, todos los elementos que tienen una ID se convierten instantáneamente en un objeto

Espero que esto lo ayude a usted, y a otros que lleguen a esta pregunta. Solucionó mi problema, que parece ser el mismo que tú.

Puede encontrar más información aquí: http://www.irt.org/articles/js191/index.htm

Disfrutar =]


Me gusta tu idea de lado del servidor, incluso si mi implementación propuesta suena un poco ghetto.

Puede establecer el .innerHTML del iframe en los contenidos HTML que capta del lado del servidor. Dependiendo de cómo tomes esto, deberás prestar atención a las rutas relativas versus absolutas.

Además, dependiendo de cómo la página que está capturando interactúa con otras páginas, esto podría no funcionar (las cookies configuradas para la página que está capturando no funcionarán en todos los dominios, tal vez el estado se rastree en Javascript ... Muchas razones esto podría no funcionar.)

No creo que el seguimiento del estado actual de la página que intentas reflejar sea teóricamente posible, pero no estoy seguro. El sitio podría rastrear todo tipo de cosas del lado del servidor, no tendrá acceso a este estado. Imagine el caso en el que en una carga de página una variable se establece en un valor aleatorio del lado del servidor, ¿cómo capturaría este estado?

¿Estas ideas ayudan con algo?

-Brian J. Stinar-


Ok, entonces en esta aplicación, hay un iframe en el que el usuario recibe enlaces o alguna capacidad que le permite a ese iframe navegar a algún sitio externo. Luego está buscando capturar la URL a la que el usuario ha navegado.

Algo para tener en cuenta. Dado que la URL es para una fuente externa, se le limitará la cantidad que puede interactuar con este iframe a través de JavaScript (o un acceso del lado del cliente), esto se conoce como seguridad de navegador entre dominios, ya que aparentemente ha descubierto . Hay soluciones de trabajo inteligentes, como se presenta aquí. Javascript entre dominios cruzados , aunque no creo que esto funcione en este caso.

Acerca de todo lo que puede acceder es la ubicación, según lo necesite.

Sugeriría que el código presentado sea más resilitante y menos propenso a errores. Intente navegar en la web en algún momento con IE o FF configurado para mostrar los errores de JavaScript. Te sorprenderás de cuántos errores de JavaScript se lanzan, en gran parte porque hay muchos javascript propensos a errores, que simplemente siguen proliferando.

Esta solución asume que el iframe en cuestión es el mismo contexto de "ventana" donde está ejecutando el javascript. (Es decir, no está incrustado dentro de otro marco o marco flotante, en cuyo caso, el código de JavaScript se involucra más, y es probable que necesite buscar de forma recursiva a través de la jerarquía de la ventana).

<iframe name=''frmExternal'' id=''frmExternal'' src=''http://www..com''></frame> <input type=''text'' id=''txtUrl'' /> <input type=''button'' id=''btnGetUrl'' value=''Get URL'' onclick=''GetIFrameUrl();'' /> <script language=''javascript'' type=''text/javascript''> function GetIFrameUrl() { if (!document.getElementById) { return; } var frm = document.getElementById("frmExternal"); var txt = document.getElementById("txtUrl"); if (frm == null || txt == null) { // not great user feedback but slightly better than obnoxious script errors alert("There was a problem with this page, please refresh."); return; } txt.value = frm.src; } </script>

Espero que esto ayude.


Puede acceder a la propiedad src del iframe pero eso solo le dará la URL cargada inicialmente. Si el usuario está navegando por el iframe, necesitará usar una HTA para resolver el problema de seguridad.

http://msdn.microsoft.com/en-us/library/ms536474(VS.85).aspx

Revise el enlace, usando una HTA y estableciendo la propiedad "aplicación" de un iframe que le permitirá acceder a la propiedad document.href y analizar toda la información que desee, incluidos los elementos DOM y sus valores, si así lo desea.


Puede usar Ra-Ajax y tener un iframe envuelto dentro, por ejemplo, un control de ventana. Aunque en términos generales no aliento a las personas a usar iframes (para nada )

Otra alternativa es cargar el HTML en el servidor y enviarlo directamente a la ventana como el contenido de una etiqueta o algo así. Vea cómo este analizador de RSS de Ajax está cargando los elementos de RSS en la fuente que se pueden descargar here (Código abierto - LGPL)

(Descargo de responsabilidad, yo trabajo con Ra-Ajax ...)


Yo uso esto.

var iframe = parent.document.getElementById("theiframe"); var innerDoc = iframe.contentDocument || iframe.contentWindow.document; var currentFrame = innerDoc.location.href;


Hice algunas pruebas en Firefox 3 comparando el valor de .src y .documentWindow.location.href en un iframe . (Nota: documentWindow se llama contentDocument en Chrome, por lo que en lugar de .documentWindow.location.href en Chrome será .contentDocument.location.href ).

src es siempre la última URL que se cargó en el iframe sin interacción del usuario. Es decir, contiene el primer valor para la URL, o el último valor que configura con Javascript desde la ventana que lo contiene:

document.getElementById("myiframe").src = ''http://www.google.com/'';

Si el usuario navega dentro del iframe, ya no podrá acceder al valor de la URL usando src. En el ejemplo anterior, si el usuario se va de www.google.com, lo hace:

alert(document.getElementById("myiframe").src);

Seguirá recibiendo " http://www.google.com ".

documentWindow.location.href solo está disponible si el iframe contiene una página en el mismo dominio que la ventana que lo contiene, pero si está disponible, siempre contiene el valor correcto para la URL, incluso si el usuario navega en el iframe.

Si intenta acceder a documentWindow.location.href (o cualquier elemento en documentWindow ) y el iframe está en una página que no pertenece al dominio de la ventana que lo contiene, se generará una excepción:

document.getElementById("myiframe").src = ''http://www.google.com/''; alert(document.getElementById("myiframe").documentWindow.location.href); Error: Permission denied to get property Location.href

No he probado ningún otro navegador.

¡Espero eso ayude!


document.getElementById(''iframeID'').contentWindow.location.href

No puede acceder a la ubicación del iframe entre dominios.