Bookmarklet para enviar a fonte da página para o formulário

Eu estou usando um bookmarklet para enviar a fonte de página atual para uma função de servidor que, em seguida, processa (armazena, nenhuma informação precisa ser retornada para o usuário).

Aviso: feio Javascript em frente, não é um idioma que eu normalmente preciso usar.

Aqui está o bookmarklet, bem impresso para facilitar a leitura:

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();
})();

Isso funciona basicamente, "do.php" recebe as seções de cabeça e corpo na variável de formulário h.

No entanto, parece funcionar apenas uma vez para cada página. Se o bookmarklet for pressionado duas vezes para a mesma página, nada acontece. Quando a página é recarregada, funciona novamente. Há algo que eu deveria estar redefinindo? (correr uma vez é o suficiente, mas seria bom dar um feedback ao usuário na segunda vez que for pressionado).

Em segundo lugar, isso mostra uma nova aba / janela. Eu posso contornar isso, fazendo do.php retornar algum javascript para fechar a janela (nota: isto é apenas para propósitos de teste, não código real):

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

Feio. O flash rápido da nova guia, depois desapareceu. Existe uma abordagem melhor? Uma mensagem de "sucesso" seria legal, mas não consigo ver como incorporar isso.

questionAnswers(1)

yourAnswerToTheQuestion