我让我的greasemonkey 脚本扫描我访问的每个页面以查找特定字符串。我想在sqlite db中记录字符串的变化。我每隔一段时间就会有另一个应用程序处理这个数据库。我不知道如何将数据存储到 sqlite db 中?我在想如果找到字符串,我可以自动启动一个可执行文件,但我不知道如何通过 javascript 来做到这一点。我认为的另一种选择是在某个端口上侦听套接字并具有一些 js 魔法,但我想不出一种静默的方式来发送这样的数据。
5 回答
我建议使用网络服务器来收集数据。您可以设置一个域或 IP 来发送数据。刚开始时,如果需要,您甚至可以在 localhost 上运行。
优点是,一旦创建,相同的体系结构可以在不同的 PC 上使用,因此您运行脚本的任何计算机都可以共享结果。
更新: 要与您的服务器通信,您需要使用GM_xmlhttpRequest。我知道一个库添加了一个抽象层以使使用 GM_xmlhttpRequest 更容易:Speakeasy.js。它是一个相对不为人知的轻量级 ActiveResource 接口,用于从 RESTful 网络服务器发送和检索数据。这是一个 Greasemonkey 脚本示例,它在每次页面加载时与网络服务器通信。它加载注释并将它们显示在页面上。
这是一个接近您需求的改编版本:
// ==UserScript==
// @name Demo Script
// @namespace http://example.com
// @description Sample
// @include *
//
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js
// @require http://strd6.googlecode.com/svn/trunk/gm_util/d_money.js
// @require http://strd6.googlecode.com/svn/trunk/gm_util/speakeasy.js
//
// ==/UserScript==
error = D$.error;
log = D$.log;
D$.debug(false);
Speakeasy
.generateResource('result')
.configure({
baseUrl: 'http://localhost:3000/'
})
;
// Attach all annotations for this page from remote server
var href = window.location.href;
currentUrl = href.substring(href.indexOf('://') + 3);
log(currentUrl);
var result1 = 'something'; // Insert your function to get your result data
var result2 = 'something else'; // Insert your function to get your result data
Speakeasy.result.create({
data: {
url: currentUrl,
result1: result1,
result2: result2
}
});
您可以快速创建 Rails 站点或使用您熟悉的任何后端。
您可能还想考虑使用 Google Gears 扩展,它在后台使用 SQLite 数据库。
我不确定如何将它与 Greasemonkey 一起使用,但 Firefox 有一个名为 Storage 的 API 用于使用 sqlite 数据库。在这里查看:https ://developer.mozilla.org/en/Storage
或者你只是使用 LubeMonkey,它是一个改进的 Greasemonkey 分支,支持 sqlite。每个安装的脚本都会创建自己的 sqlite 数据库,您可以在该数据库中执行查询更新等,您甚至可以在数据库或任何数据上缓存图像。在这里获取它http://www.gamecore.org
你可以让greasemonkey 脚本调用一个带有一些变量的url(比如你想要存储的数据)。使用 ajax 请求。您可以在本地设置 Web 服务器来处理它们。
如果您在 Windows 上,则可以使用 WAMP 快速启动 Web 服务器。只要确保启用 php_sqlite 扩展。
这可能会帮助您了解一些实现细节: http: //www.pathf.com/blogs/2006/07/bjax_with_greas/