2010-11-26 12 views
25

Me gustaría crear un en la página, pero luego agregar el src más adelante. Si hago un iframe sin un atributo src, entonces carga la página actual en algunos navegadores. ¿Cuál es el valor correcto para configurar src para que solo cargue un iframe en blanco?iframe sin un atributo src

Las respuestas que he visto son:

  • about:blank
  • javascript:false
  • javascript:void(0)
  • javascript:"";
  • URL para una página en blanco

¿Hay un claro ganador ? Si no, ¿cuáles son las compensaciones?

Me gustaría no tener advertencias de contenido mixto para urls HTTPS, ni retroceso, historial o rarezas de recarga en todos los navegadores desde IE6 en adelante.

+0

posible duplicado de [iframe src algo distinto de javascript: efecto de falso pero el mismo] (http: // stackoverflow.com/questions/2503648/iframe-src-something-other-than-javascriptfalse-but-same-effect) –

+1

Puede crear el iframe en el momento en que tenga el src disponible, para evitar este problema. Funcionaría eso? –

+3

Esa pregunta era pidiendo una manera más bonita de escribir "javascript: false". No me importa qué tan fea sea la línea, quiero la funcionalidad. Y la respuesta aceptada fue una url a una página en blanco que paga un viaje de ida y vuelta HTTP que parece peor que poder evitar eso. –

Respuesta

7

enfoque estándar cuando se crea un iframe "vacío" (como una cuña iframe, por ejemplo), es establecer el src como javascript:false;. Este es el método utilizado por la mayoría de las bibliotecas de JavaScript que crean calces iframe para usted (por ejemplo, Overlay de YUI).

+4

Y luego veremos "falso" en Ie10 ... – gaRex

+0

Sí, en IE9-10 iframe escribe texto "javascript: falso;". En este caso, es mejor verificar y usar src = "" si no es IE o si IE> 9. Para IE9 - bueno, mala suerte. PS "javascript: '';" funciona en todas partes, pero las llamadas se cargan dos veces en algunos navegadores. – rgripper

+1

Esto puede funcionar en todos los navegadores, pero se romperá si un sitio web no permite JavaScript en línea en su encabezado 'Content-Security-Policy'. Por lo tanto, no use esto en scripts que espera que otras partes incluyan en sus sitios. –

0

IMO: si no pone el src, su página no se validará. Pero es sobre eso. Si coloca un src = "", su servidor registrará muchos errores 404.

Nada está realmente mal como en "dañar". Pero entonces, ¿no está mal usar un iframe en sí mismo?

° -

9

No estoy seguro si todos los navegadores soportan "about: blank", por lo que sólo irían con su propia página en blanco a continuación.

Otra idea: ¿por qué no agregar todo el iframe usando javascript en lugar de solo el src?

+0

+1 ¡el segundo párrafo parece ser la mejor idea! –

+1

Para su primera respuesta, paga un viaje HTTP innecesario, que parece no ser óptimo. –

+0

@Paul pero la segunda respuesta es perfecta si planea rellenar el iframe usando js –

5

¿Qué hay de

about:blank 
+1

Probado en IE7,8 (modo + quirks), FF3.6, Opera 10.63, Safari 5, Chrome 7.0.x - Acerca de: en blanco presenta el comportamiento más consistente. –

+0

Aunque no es parte de un estándar, al igual que 'javascript:', no puede confiar en que * cada * cliente lo interprete correctamente –

+1

Principalmente buenas pruebas. Todavía faltan IE 6, FF 3, Safari 4, Chrome 5 y Chrome 6. ¿Y podría importar el sistema operativo aquí? –

6

Re tu comentario aclarando que usted está planeando utilizar el iframe y como destino de envío de un formulario:

me gustaría utilizar un documento vacío en el servidor que envía de vuelta un 204 no content.

Evita

  • advertencias de "contenido mixto" en el IE y el modo HTTPS
  • errores innecesarios debido a que un cliente no entiende el protocolo javascript:
  • y otros chanchullos exóticos.

También es válido HTML.

¿Qué ocurre si genera una solicitud adicional? Establezca los encabezados de almacenamiento en caché a la derecha, y solo habrá una solicitud para cada cliente.

+0

El documento vacío es una posibilidad, pero preferiría evitarlo si es posible. Una cosa menos para mantener. Si la comunidad puede proporcionar una solución que hace todo lo que hace el documento vacío Y no requiere el archivo adicional, eso es estrictamente mejor en mi mente. –

+0

@Paul Estoy de acuerdo, tal solución sería perfecta. Pero he visto esta pregunta varias veces en SO, y nunca surgió. Lo mejor que parece es 'about: blank' que funciona en la mayoría de los navegadores –

+0

Al agregar el código de estado 204 no se desencadenará el evento' onload' en el iframe en algunos navegadores, por lo que puede que este no sea el mejor enfoque si alguien está buscando engancharse a ese evento. – siannopollo

0

Sí, sé que estoy reviviendo un hilo viejo. Demándame. Estoy interesado en la respuesta.

No entiendo por qué el hecho de que el desencadenante sea un envío de formulario impide crear dinámicamente el IFrame. ¿Esto no hace exactamente lo que quieres?

<html> 
<head> 
<script type="text/javascript"> 
function setIFrame(elemName, target, width, height) { 
    document.getElementById(elemName).innerHTML="<iframe width="+width+" height="+height+" src='"+target+"'></iframe>"; 
} 
</script> 
</head> 
<body> 
<div id="iframe" style="width:400px; height:200px"></div> 
<form onSubmit="setIFrame('iframe', 'http://www.google.com', 400, 200); return false;"> 
<input type="submit" value="Set IFrame"/> 
</form> 
</body> 
</html> 
+0

El OP ha declarado que el iframe debe crearse algún tiempo antes de que se conozca su 'src' (consulte el historial de comentarios de la pregunta en sí). –

+7

No te disculpes por responder viejas preguntas. – TRiG

1

javascript:false funciona en navegadores modernos.

Lo que he visto es que esto solo "falla" cuando las arañas tontas intentan cargar javascript:false como una página.

Solución: Bloquea las arañas tontas.

+0

Sin embargo, siempre habrá más arañas tontas. –

+0

Esto puede funcionar en todos los navegadores pero se romperá si un sitio web no permite el JavaScript en línea en su encabezado 'Content-Security-Policy'. Por lo tanto, no use esto en scripts que espera que otras partes incluyan en sus sitios. –

2

javascript:false:
IE10 y FF (marcado en v23 en Linux) mostrarán 'falso' como contenido.

javascript:void(0) & & javascript:;:
IE mostrará 'no puede mostrar la página web' error en el iframe. Además, al configurar el src desde una URL válida a javascript:void(0), la página no se pondrá en blanco.

about:blank:
Funciona en todos los navegadores pero IE 9 envía una solicitud al servidor con la ruta "nula". Siendo la mejor apuesta OMI

Pedido http://jsfiddle.net/eybDj/1
Pedido http://jsfiddle.net/sv_in/gRU3V/ para ver cómo los cambios iframe src en updation dinámico con JS

Cuestiones relacionadas