使用javascript“保存”当前页面状态

时间:2010-12-19 02:41:51

标签: javascript uri

我要做的是有一个函数创建一个uri锚来重绘/重新渲染/(称之为你想要的)整个页面

基本上我希望能够将任何页面转换为URI方案,这样当我导航到这样的链接时,我会按原样获取整个页面,有点像保存网页。例如,如果我要编辑一个页面,并希望稍后恢复所有textareas就像他们的方式和表格填写,或者如果我想保存某些(小)页面而不必担心他的网站将去无需在我的计算机上保存文件(我想使用书签)

这是我到目前为止所拥有的:

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

你看我正在做什么。 好了,现在困难的部分是以某种方式使用正则表达式来替换已经在双引号中的所有双引号,而不是那些不是双引号的双引号。

例如,如果我们创建页面

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

并运行该功能足够多次我们将在第3和链接上遇到一些问题。

明白我的意思:http://jsfiddle.net/AvSh3/3/

3 个答案:

答案 0 :(得分:3)

使用内置的escape()函数:

html = escape(html);

答案 1 :(得分:0)

我把它改成了

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

哪个无法正确显示,但在查看来源时,一切看起来都是正确的。也许还需要一些其他特殊参数?

答案 2 :(得分:0)

这在我自己的页面上进行测试时有效:

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

我猜这只是一个jsBin / jsFiddle技术性但我不知道为什么。无论如何,如果人们想用它来制作bookmarklet,那就是链接:

...

我想知道如何在SO中创建一个bookmarklet链接,如果你只想用这个位置创建一个新的书签:

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

无论如何,通过这个有趣的工具,我们可以在第一个链接中执行Jon所做的事情:

http://wundes.com/bookmarklets.html