【发布时间】:2012-07-22 01:09:11
【问题描述】:
我想写一个greasemonkey脚本来抓取网站并在本地保存数据,我可以使用javascript来保存本地收集的信息吗?
【问题讨论】:
我想写一个greasemonkey脚本来抓取网站并在本地保存数据,我可以使用javascript来保存本地收集的信息吗?
【问题讨论】:
Local storage 是现代应用的首选!
【讨论】:
window.location ="data:application/octet-stream," + encodeURI(JSON.stringify(translations.custom));
这就是 Pixiv 翻译脚本如何保存自定义添加的翻译(未硬编码到其中)。您只需获得一个文件保存对话框,就像您单击了直接链接一样。
Translations.custom 只是 JSON 格式的对象 (var a = {b : 1};)。
我不知道你必须如何格式化你的数据,如果它不是 JSON,但我猜你可以尝试一下。
另一种方法是替换整个文档的 html,然后保存页面。
【讨论】:
encodeURI(sometext) 表示文本),尽管缺少默认文件名令人讨厌。
我建议使用 JQuery 的 data 方法,因为它提供跨平台支持,并且对您可以存储的信息量没有明确的限制。
幕后花絮
在内部,jQuery 创建一个空对象(称为 $.cache 好奇),用于存储您通过数据设置的值 方法。您向其中添加数据的每个 DOM 元素都分配有唯一的 ID 它用作 $.cache 对象中的键。 jQuery 不存储 该缓存中只有用户创建的数据。它还存储内部 您附加的信息和事件处理功能 活(),绑定()和委托()。拥有集中的数据存储使得 jQuery 的代码库更加健壮且无错误,这是我们所有人 可以从中受益。
【讨论】:
data 方法不会像 OP 想要的那样“保存”信息。当页面关闭或重新加载时,此类数据会丢失。
java.lang.Object ↳ android.webkit.CookieManager
或者你可以使用这种逻辑..
<html>
<head>
<script type="text/javascript">
function getCookie(c_name)
{
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++)
{
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==c_name)
{
return unescape(y);
}
}
}
function setCookie(c_name,value,exdays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}
function checkCookie()
{
var username=getCookie("username");
if (username!=null && username!="")
{
alert("Welcome again " + username);
}
else
{
username=prompt("Please enter your name:","");
if (username!=null && username!="")
{
setCookie("username",username,365);
}
}
}
</script>
</head>
<body onload="checkCookie()">
</body>
</html>
【讨论】:
使用 Mozilla 的文件对象。 MDN 文档:https://developer.mozilla.org/en/Code_snippets/File_I%2F%2FO
编辑:这更容易,但仅适用于 Chrome http://www.html5rocks.com/en/tutorials/file/filesystem/
【讨论】: