2008-10-21 19 views
15

Tengo una página, con algo de código en js y jQuery y funciona muy bien. Pero desafortunadamente, todo mi sitio es muy antiguo y usa marcos. Entonces cuando cargué mi página dentro de un marco, $(document).ready() no se enciende.

Mi conjunto de marcos se parece a:

<frameset rows="79,*" frameBorder="1" frameSpacing="1" bordercolor="#5996BF" noresize> 
    <frame name="header" src="Operations.aspx?main='Info.aspx'" marginwidth="0" marginheight="0" scrolling="no" noresize frameborder="0"> 
    <frame name="main" src="Info.aspx" marginwidth="0" marginheight="0" scrolling="auto" noresize frameborder="0">  
</frameset> 

Mi página se carga en el marco de main. ¿Que debería hacer?

+1

¿Dónde está tu JavaScript? En el marco "principal" o en el conjunto de marcos? – Tomalak

Respuesta

-2

No hay razón para que no se llame al $(document).ready(). Asegúrate de que tu página contenga un include a jquery.js. Intenta hacer una prueba simple con una página HTML vacía y solo una alerta para ver si hay otro problema.

Si usted está tratando de utilizar este dentro de la página HTML que contiene la definición del marco, tenga en cuenta que no existe ningún documento allí, tendrá que utilizar el

+4

tendrá que usar el ....? – Ken

1

¿Ha tratado de poner el código jQuery en el interior la página Info.aspx?

+0

¿Sabemos si es ASP.NET? –

+0

@BrianG frame src es 'Operations.aspx? Main = 'Info.aspx' – Gogol

0

No sé si es la mejor solución, pero cuando elimino $(document).ready() y mantengo su cuerpo, todo funciona perfectamente.

0

No estoy seguro de lo que está tratando de hacer, pero tengo una aplicación asp aún más antigua que funciona sin marcos, y recientemente agregué la funcionalidad jQuery y está funcionando muy bien. El $ (document) .ready() funciona bien dentro de un marco, pero si desea hacer referencia al DOM en otro marco, tendrá que usar el evento onload de Frame para que sepa cuándo se carga el DOM del marco. Es cierto que utilicé iFrames, pero el concepto debería ser el mismo.

2

Si desea desencadenar el evento onload para sus cuadros, a continuación, siga estos pasos:

  1. asignar una id y name a cada etiqueta <frame>. Asegúrese de que el valor de los atributos id y name sea el mismo.

  2. utilizar el siguiente código para desencadenar el evento onload del marco:

    $("frameName").ready(function() { 
        // Write your frame onload code here 
    } 
    
7

He probado el método mencionado en otro comentario:

$("#frameName").ready(function() { 
    // Write you frame on load javascript code here 
}); 

y no funcionó para mí.

este hecho: ¿

$("#frameName").load(function() { 
    //code goes here 
}); 

A pesar de que el evento no se dispara tan rápido - se espera hasta que las imágenes y css han cargado también.

+1

Para mayor claridad, debería ser $ (" # frameName "). – HertzaHaeon

+0

El selector debe ser: $ ("frame [name = 'main']") not $ ("# frameName"). –

1

Lo siguiente también trabajó para mí:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.js"></script> 
<script> 
$(window.parent.frames[0].document).ready(function() { 
    // Do stuff 
}); 
</script> 

El [0] indica que es el primer fotograma en el documento [1], que sería el segundo cuadro, y así sucesivamente. Esto es particularmente bueno si no tiene control sobre el marcado, y todavía está utilizando el documento listo.

1

He trabajado durante mucho tiempo con esta publicación ... esta es mi solución.

test.html

<!DOCTYPE HTML> 
<html> 
<head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 

    <script>   
     document.write('<frameset><frame name="frame_content" id="frame_content"></frame></frameset>'); 

     $('#frame_content').attr('src', 'test2.html'); 
     $('#frame_content').load(function() 
     { 
     if('${"#header"}' != '') { 
      $("#header", frame_content.document).remove(); 
     } 
     }); 
     if($('#frame_content').complete) $('#frame_content').trigger("load"); 
    </script> 

</head> 
</html> 

Test2.html

<!DOCTYPE HTML> 
<html> 

    <head> 
    </head> 

    <body> 
    <div id="header">You will never see me, cause I have been removed!</div> 
    </body> 
</html> 
2

Sé que esto es un viejo tema. Pero para ayudar a algunos de ustedes que llegan a esta página, aquí está mi solución:

$($("#frameName")[0].contentWindow.document).ready(function() { 
    // Write you frame onready code here 
}); 
0

No es necesario modificar el marcado. Solo arregla el selector. Debe ser:

$("frame[name='main']").ready(function(){..}); 

no

$("#frameName").ready(function(){..}); 

Nota: parece que el evento ready jQuery dispara múltiples veces. Asegúrate de que esté bien con tu lógica.

0

Esta respuesta puede ser tarde, pero esta respuesta puede ayudar a alguien como yo ...

Esto se puede hacer a través de código nativo Javascript -

ifrm2 = var ifrm2 = document.getElementById('frm2'); 
if (ifrm2.contentDocument.readyState == 'complete') { 
    //here goes the code after frame fully loaded 
} 

//id = frm2 is the id of iframe in my page 
Cuestiones relacionadas