You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Facebook页面通过Tampermonkey脚本实现数据库定时轮询及操作

嘿,我看到你在折腾Facebook页面上的Tampermonkey轮询脚本,用AJAX实现的思路没问题,但你的代码有点不完整,而且还有几个容易踩坑的点得注意。我帮你把代码补全优化,顺便给你唠唠关键细节:

完善后的可运行脚本

先给你一个完整的、能正常工作的版本,你可以根据自己的需求调整:

// ==UserScript==
// @name         Facebook Database Poller
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  定期在Facebook页面轮询数据库数据
// @author       你自己
// @match        *://*.facebook.com/*
// @connect      xyz  // 这里替换成你的API域名,比如api.yourdomain.com
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==

(function() {
    'use strict';

    // 从Tampermonkey安全存储获取API密钥,别直接硬写在代码里!
    const apiKey = GM_getValue('apiKey', '');
    if (!apiKey) {
        alert('麻烦先设置API密钥哦!你可以在浏览器控制台执行GM_setValue("apiKey", "你的密钥")');
        return;
    }

    function poll() {
        setTimeout(function() {
            $.ajax({
                url: "xyz", // 替换成你的API完整地址
                headers: {
                    'Content-Type': 'application/json',
                    'x-apikey': apiKey,
                    'cache-control': 'no-cache'
                },
                type: "GET",
                success: function(data) {
                    // 更严谨地判断空数据
                    if (data == null || Object.keys(data).length === 0) {
                        console.log('没拿到数据哦!');
                    } else {
                        console.log('收到数据啦:', data);
                        // 这里写你要执行的操作,比如修改页面元素、弹通知啥的
                        // 举个例子:在页面右上角弹个临时通知
                        const notice = document.createElement('div');
                        notice.style.cssText = 'position:fixed;top:10px;right:10px;background:#2d3748;color:white;padding:12px;border-radius:6px;z-index:9999;font-size:14px';
                        notice.textContent = `新数据:${JSON.stringify(data).substring(0, 50)}...`;
                        document.body.appendChild(notice);
                        setTimeout(() => notice.remove(), 3500);
                    }
                },
                error: function(xhr, status, err) {
                    console.error('轮询请求失败了:', status, err);
                },
                complete: function() {
                    // 不管成功失败,都继续下一轮轮询,避免断更
                    poll();
                }
            });
        }, 5000); // 每5秒轮询一次,按需调整,别太频繁哦
    }

    // 启动轮询
    poll();
})();
几个必须注意的关键点
  • 跨域请求权限:Tampermonkey默认不允许跨域请求,所以一定要在脚本元数据里加@connect 你的API域名,不然AJAX会直接失败。
  • jQuery依赖:Facebook页面一般自带jQuery,但如果哪天它更新去掉了,你可以在元数据里添加jQuery的引入声明,或者直接改用原生fetch API彻底摆脱依赖。
  • API密钥安全:绝对别把apiKey硬编码在脚本里,用Tampermonkey的GM_setValue/GM_getValue存储,避免代码泄露时密钥也跟着丢失。
  • 轮询稳定性:原来的代码只执行一次轮询,我在complete回调里加了递归调用poll(),这样不管请求成功还是失败,都会继续下一轮,不会中途停掉。
  • 轮询间隔:别设得太频繁,比如1秒一次,既给API服务器加压力,还可能被Facebook的反爬机制盯上,5-30秒区间比较合理。

最后提醒下,记得把代码里的xyz替换成你实际的API地址和域名哦!

内容的提问来源于stack exchange,提问作者Aarish Ramesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:12:14