Me gustaría saber si hay una alternativa a iFrames con HTML5. Quiero decir con eso, ser capaz de inyectar HTML de dominios cruzados dentro de una página web sin usar un iFrame.
Básicamente hay 4 formas de incrustar HTML en una página web:
<iframe>
El contenido de un iframe vive completamente en un contexto separado que su página. Si bien esa es principalmente una gran característica y es la más compatible entre las versiones del navegador, crea desafíos adicionales (reducir el tamaño del marco al contenido es difícil, increíblemente frustrante para el script dentro / fuera, casi imposible de diseñar).XMLHttpRequest
objeto para recuperar datos e inyectarlos en su página. No es ideal porque depende de las técnicas de secuencias de comandos, lo que hace que la ejecución sea más lenta y compleja, entre otros inconvenientes .Componentes web HTML5 . Las importaciones HTML, parte de los componentes web, permiten agrupar documentos HTML en otros documentos HTML. Eso incluye HTML
, CSS
, JavaScript
o cualquier otra cosa de un .html
archivo puede contener. Esto lo convierte en una gran solución con muchos casos de uso interesantes: dividir una aplicación en componentes agrupados que puede distribuir como bloques de construcción, administrar mejor las dependencias para evitar la redundancia, la organización del código, etc. Aquí hay un ejemplo trivial:
<!-- Resources on other origins must be CORS-enabled. -->
<link rel="import" href="http://example.com/elements.html">
La compatibilidad nativa sigue siendo un problema, pero puede usar un polyfill para que funcione en los navegadores de hoja perenne de hoy.
Puede usar objeto e incrustar, así:
Lo cual no es nuevo, pero aún funciona. Sin embargo, no estoy seguro de si tiene la misma funcionalidad.
fuente
No, no hay un equivalente. El
<iframe>
elemento sigue siendo válido en HTML5. Dependiendo de la interacción exacta que necesite, puede haber diferentes API. Por ejemplo, existe elpostMessage
método que le permite lograr la interacción de JavaScript entre dominios. Pero si desea mostrar contenido HTML de dominio cruzado (diseñado con CSS y hecho interactivo con JavaScript)iframe
sigue siendo una buena manera de hacerlo.fuente
object
es una alternativa fácil en HTML5:También puedes probar
embed
:fuente
Si desea hacer esto y controlar el servidor desde el que se sirve la página base o el contenido, puede usar Cross Origin Resource Sharing ( http://www.w3.org/TR/access-control/ ) para permitir que el cliente- JavaScript lateral para cargar datos en una
<div>
víaXMLHttpRequest()
:Ahora, para el eje de toda esta operación, debe escribir código para su servidor que les dará a los clientes el
Access-Control-Allow-Origin
encabezado, especificando a qué dominios desea que pueda acceder el código del lado del clienteXMLHttpRequest()
. El siguiente es un ejemplo de código PHP que puede incluir en la parte superior de su página para enviar estos encabezados a los clientes:fuente
Esto también parece funcionar, aunque W3C especifica que no está destinado "para una aplicación externa (normalmente no HTML) o contenido interactivo"
Más información: http://www.w3.org/wiki/HTML/Elements/embed http://www.w3schools.com/tags/tag_embed.asp
fuente
Un iframe sigue siendo la mejor manera de descargar contenido visual entre dominios. Con AJAX ciertamente puede descargar el HTML de una página web y pegarlo en un div (como otros han mencionado), sin embargo, el mayor problema es la seguridad. Con los iframes podrás cargar el contenido de dominio cruzado pero no podrás manipularlo ya que el contenido no te pertenece realmente. Por otro lado, con AJAX ciertamente puede manipular cualquier contenido que pueda descargar, pero el servidor del otro dominio debe configurarse de tal manera que le permita descargarlo para comenzar. Muchas veces no tendrá acceso a la configuración del otro dominio e incluso si lo hace, a menos que haga ese tipo de configuración todo el tiempo, puede ser un dolor de cabeza. En cuyo caso, el iframe puede ser la alternativa MUCHO más fácil.
Como otros han mencionado, también puede usar la etiqueta de inserción y la etiqueta de objeto, pero eso no es necesariamente más avanzado o más nuevo que el iframe.
HTML5 se ha orientado más hacia la adopción de API web para obtener información de dominios cruzados. Por lo general, las API web solo devuelven datos y no HTML.
fuente
nice-to-know
Puede usar un XMLHttpRequest para cargar una página en un div (o cualquier otro elemento de su página realmente). Una función de ejemplo sería:
Si su servidor es capaz, también puede usar PHP para hacer esto, pero como está solicitando un método HTML5, esto debería ser todo lo que necesita.
fuente
Creé un módulo de nodo para resolver este problema node-iframe-reemplazo . Proporciona la URL de origen del sitio principal y el selector CSS para inyectar su contenido y fusiona los dos.
Los cambios en el sitio principal se recogen cada 5 minutos.
La fuente contiene un ejemplo práctico de inyección de contenido en la página de inicio de BBC News .
fuente
Deberías echar un vistazo a JSON-P: esa fue una solución perfecta para mí cuando tuve ese problema:
https://en.wikipedia.org/wiki/JSONP
Básicamente, define un archivo javascript que carga todos sus datos y otro archivo javascript que lo procesa y lo muestra. Eso elimina la fea barra de desplazamiento de los iframes.
fuente