Bookmarklet, aby przesłać źródło strony do formularza

Używam bookmarkletu, aby wysłać bieżące źródło strony do funkcji serwera, która następnie ją przetwarza (przechowuje, żadna informacja nie musi zostać zwrócona użytkownikowi).

Ostrzeżenie: przed nami brzydki Javascript, nie jest to język, którego normalnie potrzebuję.

Oto bookmarklet, ładnie wydrukowany, aby ułatwić czytanie:

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

Zasadniczo działa, „do.php” odbiera sekcje głowy i ciała w postaci zmiennej h.

Jednak wydaje się, że działa tylko raz dla każdej strony. Jeśli bookmarklet zostanie naciśnięty dwukrotnie dla tej samej strony, nic się nie dzieje. Po ponownym załadowaniu strona działa ponownie. Czy powinienem zresetować coś? (wystarczy raz uruchomić, ale fajnie byłoby przekazać użytkownikowi informację zwrotną po drugim naciśnięciu).

Po drugie, pojawia się nowa karta / okno. Mogę obejść ten problem, zwracając do.php jakiś javascript, aby zamknąć okno (uwaga: jest to tylko w celach testowych, a nie prawdziwy kod):

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

Brzydki. Szybki flash nowej karty, a potem zniknął. Czy jest lepsze podejście? Wiadomość o „sukcesie” byłaby miła, ale nie wiem, jak to włączyć.

questionAnswers(1)

yourAnswerToTheQuestion