¿Cómo imprimir en Netscape sin que muestre las capas ocultas?

Acabo de descubrir que tengo el teclado roto.
En fin. Al grano. El problema que yo tengo es que oculto las capas imprimo y después vuelvo a mostrarlas. En ie me imprime justo cuando yo quiero, es decir entre mostrar las capas y ocultar las capas. Sin embargo, en netscape hago lo mismo respetando la estructura para ocultar y mostrar las capas. Pero he aquí el problema, no me imprime cuando yo quiero que imprima. Me refiero que primero oculto la capa doy la orden de imprimir y acto seguido muestro las capas. Pues oye, que por mucho que le diga que imprima justo antes de mostrar nuevamente las capas, no le da la gana de hacerlo y me imprime todas las capas. He probado con un bucle de retardo pero esto me parece una chapuza.
De verdad que hoy llevo un lunes...
1

1 Respuesta

28.975 pts.
... con el mismo resultado que tú. Tal vez el problema provenga del hecho de que en Netscape 4 los diálogos no son modales: es decir, que todos los diálogos que surgen de una página corren en hilos de ejecución independientes y no detienen el proceso de la página "madre" (como pasa en Explorer).
Esto no es normalmente un problema, salvo en casos como el tuyo. El asunto sería determinar cuándo se "toma la foto" de la página para imprimir (cuándo se lee el contenido renderizado para mandarlo al spooler de impresión). Si ocurre cuando pulsas OK en el diálogo de imprimir, ni siquiera un bucle de retardo va a salvarte, porque el usuario puede tardar un tiempo arbitrario en pulsar este botón (puede irse a tomar café, por ejemplo...)
No hay solución para esto. Además, un bucle de retardo puede colgar toda la máquina (no sólo el ordenador). Te recomiendo que utilices un temporizador:
var timer=setTimeout('mifuncion()',5000);
Entre comillas va lo que quieres ejecutar, y el segundo argumento indica la espera en milisegundos. La variable timer mantiene un "handle" del temporizador, que puede utilizarse para cancelarlo antes de que haya vencido:
clearTimeout(timer);
Como quiera que el hecho de llamar al método window. Print() no le da a la página ninguna indicación acerca de cuándo se completa el proceso, tu única opción consiste en ocultar las capas e imprimir (pulsando un botón) y mostrarlas pulsando otro. Así es el usuario el que "sincroniza" (no estaría de más mostrar un alert() antes de imprimir, indicando lo que hay que hacer).
Una posibilidad algo más elaborada es usar un frame oculto para cargar un "doble" de tu página. Me explico. En un frameset con dos frames, uno del 100% de tamaño y otro de 0, con el atributo NORESIZE, puedes cargar dos veces tu página. Cuando desees imprimir una capa, ocultas todas las demás *en el frame oculto* (accede a ellas a través de parent. FrameOculto.document...) e imprimes este frame a través de una función imprimir() definida en él:
function imprimir() {
self.focus(); // esto lo necesita Explorer, no Netscape
self.print();
}
Esta función estará en LOS DOS frames (porque tienen la misma fuente), pero la llamarás así: parent.frameOculto.imprimir();
... con lo que te garantizas que se imprime el frame correcto (el oculto, en este caso). Antes de imprimir (y antes de ocultar las capas) estaría bien recargar el frame, sólo para asegurarte de que está en su estado inicial, con todas las capas mostradas:
parent.frameOculto.location.href=location.href;
Prueba a ver qué resultados te da, pero si eso no te funciona... En cualquier caso, es una solución muy poco práctica, incómoda de implementar, complicada... En fin, me temo que no puedo hacer más por ti. Espero que tengas suerte.
Saludos.
Bruckner
p.d.: Si vas a hacer una serie de preguntas sobre lo mismo, no las hagas por separado (sobre todo si vas a dar una puntuación baja al experto). Tampoco puntúes preguntas emitidas "por accidente": pueden cancelarse al cabo de una semana sin "hacer daño a nadie".

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas