2010-12-19 19 views
5

Co staram się zrobić, to mieć funkcja tworzenia uri kotwicę na przerysowanie/rerender/(nazwać to, co chcesz) cała strona„zapisz” aktualny stan strony przy użyciu javascript

Zasadniczo chcę być w stanie przekonwertować dowolną stronę na schemat URI, tak więc po przejściu do takiego linku otrzymuję całą stronę w taki sposób, jak na przykład zapisywanie strony internetowej. Na przykład, gdybym miał edytować stronę i chciałbym ją później wznowić z wszystkimi tekstami, takimi jakimi są i wypełnionymi formularzami, lub gdybym chciał zapisać stronę (małą), nie martwiąc się, że jej strona pójdzie w dół i bez konieczności zapisywania plików na moim komputerze (Chcę użyć bookmarkletów)

Oto co mam do tej pory:

html = '<html>' + document.documentElement.innerHTML + '</html>'; 
//html = html.replace(/"/g, '\\"'); 
a = document.createElement('a'); 
a.href = 'data:text/html;charset=utf-8,' + html; 
a.innerHTML = 'click here'; 
document.body.appendChild(a); 

Widzisz, co usiłuję zrobić. Ok teraz twarda część w jakiś sposób używa wyrażenia regularnego do zamiany wszystkich podwójnych cudzysłowów, które są już w podwójnych cudzysłowach, ale nie tych, które nie są.

Na przykład jeśli utworzyć stronę

<html><body>Testing</body></html> 

i uruchomić funkcję tyle razy będziemy się pewne problemy z 3. i linków.

Zobacz, co mam na myśli: http://jsfiddle.net/AvSh3/3/

+0

zmodyfikowałem swój questio n, więc mam nadzieję, że więcej ludzi, którzy mogą pomóc, to znajdzie/zrozumie. –

+0

Znacznie wyraźniej, dzięki – qwertymk

+0

Nie mogę się doczekać, aby zobaczyć, co z tego wyniknie. Naprawdę nie do końca rozumiem, jaki jest cel, ale coś mi mówi, że wyniki będą fajne. – Hemlock

Odpowiedz

0

Działa to podczas testowania na własnej stronie:

a = document.createElement('a'); 
a.href = 'data:text/html;charset=utf-8,<html>' + 
    escape(document.documentElement.innerHTML) + '</html>'; 
a.innerHTML = 'click here'; 
document.body.appendChild(a); 

Zgaduję, że to tylko szczegóły techniczne jsBin/jsFiddle ale nie mam pojęcia, dlaczego. W każdym razie, jeśli ludzie chcą to wykorzystać, aby bookmarkletów heres link:

....

No nie mogę dowiedzieć się, jak zrobić link bookmarklet w SO, jeżeli chcesz po prostu stworzyć nową zakładkę z tej lokalizacji:

javascript:a=document.createElement("a");a.href="data:text/html;charset=utf-8,<html>"+escape(document.documentElement.innerHTML)+"</html>";a.innerHTML="click here";document.body.appendChild(a); 

Zresztą z tego narzędzia zabawy możemy robić takie rzeczy jak Jon robi w pierwszy link tutaj:

http://wundes.com/bookmarklets.html

3

pomocą wbudowanego w ucieczce() Funkcja:

html = escape(html); 
+0

Nadal nie działa: http://jsbin.com/uqeni4/edit – qwertymk

0

mam przerobione go do

var html = '<html>' + $("html").html() + '</html>'; 
$('<a></a>').html("click here") 
.attr("href", 'data:text/html;charset=utf-8,' + escape(html)) 
.appendTo($("body")); 

który nie wyświetla poprawnie , ale podczas przeglądania źródła wszystko wygląda poprawnie. Może jakiś inny specjalny parametr jest wymagany?

+0

w rzeczywistości szukam odpowiedzi innej niż jQuery. Używałem go w jsfiddle, ponieważ z jakiegoś powodu window.onload nie działał i miałem dość próbując to rozgryźć. Zgaduję, że podwójne cudzysłowy trzeba uciec, gdy są w innych podwójnych cudzysłowach.Chyba że jest lepszy sposób na zrobienie tego – qwertymk

+0

jsBin przykład: http://jsbin.com/uqeni4/edit – qwertymk

+1

@qwe - oba wydają się działać na prosty przykład. Kiedy próbowałem na bardziej złożonej stronie (z jQuery, częścią struktury Play) otrzymałem błędy javascript i problemy z wyświetlaniem, mimo że kod źródłowy wygląda dobrze. Nie wiesz, co to jest umowa. –

Powiązane problemy