Bookmarklet para enviar la fuente de la página al formulario

Estoy usando un bookmarklet para enviar la fuente de la página actual a una función del servidor que luego la procesa (la almacena, no es necesario devolver la información al usuario).

Advertencia: Javascript feo por delante, no es un idioma que normalmente deba usar.

Aquí está el bookmarklet, bonito impreso para facilitar la lectura:

javascript: (function () {
var h = document.documentElement.innerHTML;

function c(a, b) {
    var c = document.createElement("textarea");
    c.name = a;
    c.value = b;
    d.appendChild(c)
}(document), d = document.createElement("form");
d.method = "POST";
d.action = "http://example.com/do.php";
d.enctype = "multipart/form-data";
d.target = "_blank";
c("h", h);
c("u", "1234");
document.body.appendChild(d);
d.submit();
})();

Esto funciona básicamente, "do.php" recibe las secciones de cabeza y cuerpo en la variable de forma h.

Sin embargo, solo parece funcionar una vez para cada página. Si se presiona el bookmarklet dos veces para la misma página, no sucede nada. Cuando la página se vuelve a cargar, funciona de nuevo. ¿Hay algo que debería estar reiniciando? (correr una vez es suficiente, por supuesto, pero sería bueno dar un comentario al usuario la segunda vez que se pulsa).

En segundo lugar, aparece una nueva pestaña / ventana. Puedo solucionar esto haciendo que do.php devuelva algún javascript para cerrar la ventana (nota: esto es solo para propósitos de prueba, no para código real):

<?php
$page = $_REQUEST['h'];
file_put_contents('/tmp/work.txt', $page);
echo '<script type="text/javascript">window.close();</script>"';
?>

Feo. Rápido flash de la nueva pestaña, luego desaparece. ¿Hay un mejor enfoque? Un mensaje de "éxito" estaría bien, pero no veo cómo incorporarlo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta