write variable script div body javascript firefox usability

javascript - script - document.write variable



document.write() frente a insertar nodos DOM: ¿conserva la información del formulario? (4)

¿Sería posible para usted agregar un gancho que podría usar para apuntar al nuevo textarea? p.ej. a <div>

<div id="addtextarea"></div> var e = document.getElementByID(''addtextarea''); e.innerHTML = ''<textarea></textarea>'';

Luego, si necesita recordar los contenidos, puede tomar el valor innerHTML para incluir el HTML o solo el valor del nodo de texto del área de texto para extraer el texto.

Considere dos páginas web con lo siguiente en su cuerpo, respectivamente:

<body> <script> document.writeln(''<textarea></textarea>'') </script> </body>

y

<body> <script> var t = document.createElement(''textarea''); document.body.appendChild(t); </script> </body>

(piense en ellos como parte de algo más grande, donde las áreas de texto deben ser generadas desde JavaScript y no pueden ser codificadas en la página). Ambos producen la misma producción, pero la primera se considera "mala", mientras que la segunda se considera la forma "correcta" de hacerlo. (¿Derecha?)

Por otro lado, si escribe algo en la página y luego lo actualiza, o va a otro lugar y pulsa Atrás, en el primer caso, lo que escribió en el área de texto se conserva, mientras que en el segundo se pierde. (Al menos en Firefox)

¿Hay alguna manera de utilizar este último método y aún tener la característica útil de que lo que el usuario ha escrito en un formulario se guarde incluso si accidentalmente pulsan actualizar o regresan a través del botón Atrás (al menos en Firefox)?


Creo que la versión document.write realmente destruye un contenido existente en la página. Es decir, las etiquetas de cuerpo y guión ya no estarán allí. Es por eso que las personas generalmente usan appendChild.

Mantener el texto o no es muy específico del navegador. No apostaría a que Firefox tampoco cambiaría su comportamiento en una versión futura. Sugeriría implementar un diálogo de alerta cuando el usuario intente navegar fuera de la página y no haya contenido guardado en los campos de edición. Usualmente harías esto con un evento de descarga.


document.write () no eliminará el contenido de la página siempre que se ejecute en línea a medida que se procesa la página. La publicidad en línea hace un uso extenso de document.write () para escribir anuncios dinámicamente en la página a medida que se carga.

Sin embargo, si ejecutó el método document.write () más adelante en el historial de la página (después de que el cuerpo está completamente renderizado), como dice Chase, soplaría el cuerpo existente y mostraría el argumento en document.write () .

Aparte de eso, estoy de acuerdo con que el comportamiento de preservación de formularios es realmente bastante específico para el navegador, y no es algo en lo que deba confiar en muchos casos. Es una función allí para ayudar al usuario en lugar de ser algo que los desarrolladores deben conocer o intentar utilizar.


Normalmente, prefiero crear un elemento DOM e insertarlo, especialmente porque puedo insertarlo exactamente donde quiero en la página (es decir, usar object.appendChild o body.appendChild). Tampoco importa si la inserción es durante la carga de la página o más tarde, así que puedo usar una función de inserción generalizada y usarla en cualquier momento, durante o después de la carga de la página completa.

Sin embargo, durante el proceso de carga, si está insertando contenido que incluye javascript (es decir, una secuencia de SCRIPT tipo = "texto / javascvript" ....... / SCRIPT), DEBE usar document.write para tener el script ejecutar.

  • El uso de document.body.appendChild (theInsertionObject) agregará correctamente la inserción en el punto actual del proceso de carga, incluida la secuencia de etiquetas SCRIPT, pero NO ejecutará el javascript.

  • Si usa document.write (theInsertionCode), el código se insertará en el punto actual en el proceso de carga, y cualquier secuencia de etiqueta SCRIPT incrustada se ejecutará antes de que se cargue el resto de la página.