Mi página Web utiliza iframes para recoger el contenido de otras páginas web. Todas las páginas están en el mismo dominio.

Desde la página principal, hay una manera de confirmar que todos los iframes se han cargado, y que no hay ningún error 404?

InformationsquelleAutor Christophe | 2013-05-11

2 Comentarios

  1. 19

    El estado sólo vive en el encabezado de respuesta.

    La Página de error 404 es el manejo de un Código de Estado HTTP, que sólo se incluye en la respuesta del servidor envía al navegador, pero no en el real window y document objetos del DOM de javascript que puede acceder. Esto significa que mientras que usted ciertamente puede recoger el código de estado y tomar las acciones apropiadas, sólo podrá hacerlo cuando javascript está recibiendo la respuesta, como con un jQuery.ajax() solicitud de o un XmlHttRequest para cargar el «iframe».

    La esperanza de la página 404 de la siguiente manera 404 normas.

    Si lo anterior no es una opción, la única otra posibilidad puede ser la comprobación de que el título y/o etiquetas H, para » 404 «. Mientras que esto ciertamente es menos que ideal (me encantaría ver, «404, Película que no se Encuentra, la Película.»), es su única opción.

    $('#iframe').load(function (e) {
        var iframe = $("#iframe")[0];
    
        if ( iframe.innerHTML() ) {
            //get and check the Title (and H tags if you want)
            var ifTitle = iframe.contentDocument.title;
            if ( ifTitle.indexOf("404")>=0 ) {
                //we have a winner! probably a 404 page!
            }
        } else {
            //didn't load
        }
    });
    • Esta parece ser la respuesta correcta, pero no entiendo por qué no implementar este pequeño pero útil función de
    • Aunque sería útil, también podría ser fácilmente usado. Al final del día, el contenido del encabezado en el encabezado porque es crítico tanto para la conexión y la seguridad, entre el servidor y el cliente.
    • Supongo que esto sólo funcionará si el documento en Iframe está en el mismo dominio?
    • ¿qué acerca de la cruz de dominio?
    • Esta es la intención de la cruz de dominio. Si usted está hablando acerca de la cruz de dominio de secuencias de comandos en iframes, javascript, u otros análogos, estás de suerte, a menos que usted es dueño de los dominios. Si ese es el caso, hay otros hilos para tales discusiones.
    • Para de la cruz documento de dominio ver la 2a parte de mi respuesta.
    • No podía simplemente utilizar this en lugar de var iframe = $("#iframe")[0];?
    • absolutamente.
    • No funciona con dominios de diferente origen, por desgracia
    • si usted es dueño de los dominios, puede con CORS y/o Access-Control-Allow-Origin encabezados. Si no, a continuación, utilizar la respuesta mirmdasif proporcionada a continuación. Tomo nota con su respuesta, que ya tendrás todo el HTML en el que el ajax de respuesta, usted puede actualizar el DOM en lugar de hacer otra petición de la carga en el iframe.

  2. 15

    Supongamos que este es el código html

    <html>
        <head></head>
        <body>
          <iframe id="iframe"></iframe>
        </body>
     </html>

    Hay dos escenario

    1. Su iframe src está en el mismo dominio, desde donde la página se originó.

      Ex : page url www.example.com and iframe's src www.example.com/iframe

      Puede utilizar jQuery ajax para comprobar si el recurso está disponible

         $(function() {
              $.ajax({
                  type : "HEAD",
                  async : true,
                  url : "www.example.com/iframe"
              })
              .success(function() {
                  $("#iframe").attr("src", "www.example.com/iframe");
              })
              .error(function(){
                 //Handle error perhaps a failover url
              })
          });
    2. Su iframe src no está apuntando para el mismo dominio, desde donde su página en que se originó.

      Ex : Page url www.example.com and iframe's src www.otherdomain.com/iframe

      Ahora los navegadores no le permiten hacer un cross site request desde el código javascript, debido a origen de la cruz de la política. La forma de evitar es hacer un jsonp solicitud.

      $(function() {
          $.ajax({
              url: "www.otherdomain.com/iframe",
              dataType: "jsonp",
              timeout: 5000,
      
              success: function () {
                  $("#iframe").attr("src", "www.otherdomain.com/iframe");
              },
              error: function (parsedjson) {
                  if(parsedjson.status == "200") {
                      $("#iframe").attr("src", "www.otherdomain.com/iframe");
                  } else {
                      //Handle error
                  }
              }
          });
      });
    • la parte 2 es muy interesante, nunca pensé en eso.
    • Recientemente se enfrentó a esa cuestión que tiene que resolver de una manera diferente 🙂
    • No es una mala solución, pero si estás usando ajax de jQuery para agarrar el contenido de todos modos, ¿por qué usar iframes en todo, y por qué forzar el iframe para volver a ejecutar la misma petición que acaba de hacer con ajax? En lugar de ello, sólo tienes que tomar el contenido de la respuesta de ajax, y ponerlo en la página. Terminar con el uso de ajax objeto de crear una completa solución de AJAX.
    • Si se trata de un cruce de dominio de la solicitud, no sería posible.
    • hacer la petición AJAX a su propio servidor, tiene la petición del servidor de la url y devuelve el resultado como la respuesta de Ajax. A continuación, tiene el contenido completo del cuerpo para funcionar en… supongo que estaría fuera del ámbito de esta discusión, aunque.
    • Chiboucas Que de la otra manera. Pero entonces usted tiene que tratar con los servidores de firewall que permite la dirección URL solicitada. También usted puede no tener ningún backend así. Si ese es el caso, usted tiene que tratar con él en el lado del cliente.
    • no se puede poner el contenido en iframe otra que llamar a src=url_address al menos no en la forma tradicional. Si desea colocar el contenido en iframe supongo que se puede lograr que al escribir código javascript que hace que. Con ajax enfoque que usted puede asegurarse de saber cuando ocurrió el error y mostrar mensaje correcto. De lo contrario, si el error ocurrió iframe todavía muestra un error, ¿cómo puede el usuario se diferencian? El error podría ser el mensaje
    • Lo que estoy diciendo es que si estás yendo tan lejos como para tirar el contenido a través de una petición AJAX, por qué no, simplemente, que su servidor de hacer la solicitud, y no molestar con el iframe en todo. Su servidor puede analizar y limpiar el cuerpo de la respuesta, y enviarlo como respuesta a la petición AJAX, que, a continuación, simplemente puede cargar en un div, o directamente en el cuerpo de la trama.
    • En una empresa de fabricación de software de servidor de llamar a una nueva dirección url no siempre es sencillo. Usted necesidad de lidiar con el firewall y los mete.
    • jsonp solución es simplemente impresionante, gracias!
    • No funciona en Firefox y Safari, tiran error al cargar el html con la secuencia de comandos
    • En la segunda parte, me gustaría señalar que parsedjson.status realmente tiene valor en Number no String para que if declaración de siempre resultará en false.
    • en realidad no. No es una estricta verificación como (200 === «200») Usted puede probar este código en el navegador de la consola. la consola.log(200 == «200»)
    • Estás en lo correcto. Este es mi error. Me acostumbré a usar === todo el tiempo.

Dejar respuesta

Please enter your comment!
Please enter your name here