2010-12-19 15 views
5

Lo que estoy tratando de hacer es tener una función de crear un ancla URI para volver a trazar/reRender/(llámalo como quieras) toda la página"salvar" el estado actual de la página usando javascript

Básicamente quiero ser capaz de convertir cualquier página en un esquema de URI para que cuando navegue a dicho enlace obtenga la página completa tal como está, como guardar una página web. Por ejemplo, si tuviera que estar editando una página y quisiera continuar más tarde con todas las áreas de texto tal como están y los formularios rellenos, o si quería guardar la página de alguien (pequeña) sin tener que preocuparme de que su sitio se vaya hacia abajo y sin tener que guardar los archivos en mi equipo (Quiero utilizar bookmarklets)

Esto es lo que tengo hasta ahora:

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

ves lo que estoy tratando de hacer. Ok, ahora la parte difícil es usar de alguna manera una expresión regular para reemplazar todas las comillas dobles que ya están entre comillas pero no las que no lo son.

Por ejemplo si creamos la página

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

y ejecutar la función suficientes veces vamos a tener algunos problemas con el tercero y en los enlaces.

lo que quiero decir: http://jsfiddle.net/AvSh3/3/

+0

he modificado su cuestio n así que espero que más personas que puedan ayudar lo encuentren/entiendan –

+0

Mucho más claro, gracias – qwertymk

+0

No puedo esperar a ver qué pasa con esto. Realmente no entiendo completamente cuál es el objetivo, pero algo me dice que los resultados serán geniales. – Hemlock

Respuesta

0

Esto funciona cuando se prueba en mi propia página:

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

supongo que es sólo una cuestión técnica jsBin/jsFiddle pero no tengo ni idea de por qué. De todos modos, si la gente quiere usar esto para hacer bookmarklets aquí está el enlace:

....

Bueno, no puedo encontrar la manera de hacer un enlace bookmarklet en tanto, si usted quiere sólo crear un nuevo marcador con esta ubicación:

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

de todos modos, con esta divertida herramienta que podemos hacer cosas como Jon hace en el primer link aquí:

http://wundes.com/bookmarklets.html

3

utilizar la función incorporada de escape():

html = escape(html); 
+0

Todavía no funciona: http://jsbin.com/uqeni4/edit – qwertymk

0

he vuelto a trabajar en

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

que no muestra correctamente , pero al ver la fuente, todo parece correcto. Tal vez se requiere algún otro parámetro especial?

+0

en realidad estoy buscando una respuesta que no sea jQuery. Solo lo estaba usando en jsfiddle porque por alguna razón window.onload no funcionaba y me cansé de intentar resolverlo. Supongo que las comillas dobles deben escaparse cuando están en otras comillas dobles.A menos que haya una mejor manera de hacerlo al – qwertymk

+0

jsBin example: http://jsbin.com/uqeni4/edit – qwertymk

+1

@qwe - ambos parecen funcionar para el ejemplo simple. Cuando probé en una página más compleja (con jQuery, parte de Play Framework) obtuve errores de javascript y visualicé problemas a pesar de que el código fuente se veía bien. No está seguro de cuál es el trato –

Cuestiones relacionadas