1. Agrega un marco a la página
  2. Eliminarlo
  3. Agrega otro marco con el mismo nombre
  4. window.frames["frame_name"] no funciona

Html

<iframe id="replaceme" name="frame_1"></iframe><br />

Js

$("body").append(window.frames[0].name + "<br />");
$("body").append(window.frames["frame_1"].name + "<br />");
$("body").append( (window.frames[0] == window.frames["frame_1"]) + "<br />");

$("#replaceme").remove();

$("body").append('<iframe name="frame_1"></iframe><br />');

$("body").append(window.frames[0].name + "<br />");
$("body").append(window.frames["frame_1"].name + "<br />");
$("body").append( (window.frames[0] == window.frames["frame_1"]) + "<br />");

http://jsfiddle.net/xbmSs/

¿Es esto un error o un comportamiento esperado? Funciona bien en Opera, Safari, Chrome. ¿Alguna sugerencia de cómo solucionarlo en Firefox?

0
forresto 18 feb. 2012 a las 19:23
Su ejemplo parece estar funcionando en Chrome.
 – 
Nick
18 feb. 2012 a las 19:30
De acuerdo, parece que ha sido un error desde 2002. Todavía estoy buscando una solución alternativa para Firefox.
 – 
forresto
18 feb. 2012 a las 19:34
Parece que la única solución es no reutilizar los nombres de los marcos.
 – 
forresto
18 feb. 2012 a las 20:17

1 respuesta

La mejor respuesta

Esto es un error, como ya se dio cuenta.

Hay dos opciones para las soluciones, además de no reutilizar los nombres de los marcos:

1) Puede delete window.frames["frame_name"] al eliminar el marco relevante del DOM o justo antes de acceder window.frames["frame_name"]. Cualquiera de los dos debería funcionar en Firefox, pero no puedo hablar con otros navegadores.

2) Puede cambiar a document.getElementById("frame_id").contentWindow. El gran problema es la compatibilidad con IE, especialmente en versiones anteriores de IE ...

4
Boris Zbarsky 19 feb. 2012 a las 08:46
Tenga en cuenta que el método delete window.frames["frame_name"] arroja un "El objeto no admite esta acción" en IE8
 – 
brettcvz
30 ene. 2013 a las 12:13