5

我让我的greasemonkey 脚本扫描我访问的每个页面以查找特定字符串。我想在sqlite db中记录字符串的变化。我每隔一段时间就会有另一个应用程序处理这个数据库。我不知道如何将数据存储到 sqlite db 中?我在想如果找到字符串,我可以自动启动一个可执行文件,但我不知道如何通过 javascript 来做到这一点。我认为的另一种选择是在某个端口上侦听套接字并具有一些 js 魔法,但我想不出一种静默的方式来发送这样的数据。

4

5 回答 5

3

我建议使用网络服务器来收集数据。您可以设置一个域或 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 站点或使用您熟悉的任何后端。

于 2009-03-04T05:40:07.767 回答
2

您可能还想考虑使用 Google Gears 扩展,它在后台使用 SQLite 数据库。

于 2009-03-02T19:59:46.860 回答
1

我不确定如何将它与 Greasemonkey 一起使用,但 Firefox 有一个名为 Storage 的 API 用于使用 sqlite 数据库。在这里查看:https ://developer.mozilla.org/en/Storage

于 2009-03-04T16:03:28.207 回答
1

或者你只是使用 LubeMonkey,它是一个改进的 Greasemonkey 分支,支持 sqlite。每个安装的脚本都会创建自己的 sqlite 数据库,您可以在该数据库中执行查询更新等,您甚至可以在数据库或任何数据上缓存图像。在这里获取它http://www.gamecore.org

于 2010-04-03T18:16:46.993 回答
0

你可以让greasemonkey 脚本调用一个带有一些变量的url(比如你想要存储的数据)。使用 ajax 请求。您可以在本地设置 Web 服务器来处理它们。

如果您在 Windows 上,则可以使用 WAMP 快速启动 Web 服务器。只要确保启用 php_sqlite 扩展。

这可能会帮助您了解一些实现细节: http: //www.pathf.com/blogs/2006/07/bjax_with_greas/

于 2009-02-28T19:59:36.050 回答