我需要的是定期将firepad的内容(html)保存在数据库中。
我尝试使用 cron 服务保存该信息,该服务调用一个页面,该页面通过 ajax 请求将内容发送到执行该工作的第二个 php 页面。
如果我手动调用此 url,则所有工作,但如果 cron 服务调用 url,则 javascript 不会执行。
我怎样才能做到这一点?
我需要的是定期将firepad的内容(html)保存在数据库中。
我尝试使用 cron 服务保存该信息,该服务调用一个页面,该页面通过 ajax 请求将内容发送到执行该工作的第二个 php 页面。
如果我手动调用此 url,则所有工作,但如果 cron 服务调用 url,则 javascript 不会执行。
我怎样才能做到这一点?
不幸的是,目前还没有直接的方法来实现这一目标。您对 cron 作业有一个好主意,但由于必须执行 javascript,除非您使用像phantomjs这样的无头浏览器来加载页面,否则它将无法工作。你可以试试看。
或者,我们的 Firepad 用户之一,Clément Wehrung用一些棘手的节点代码解决了这个问题,该代码在后端服务器的节点内部运行 firepad.js。我没有玩过代码,但这可能是一个很好的起点。
节点firepad.js:
/* jshint evil: true */
var jsdom = require('jsdom');
var fs = require('fs');
var Firepad = {};
/**
* Load Dependencies Sources
*/
// HACK: Make Firepad expose FirebaseAdapter
Firepad.FirepadSource = fs.readFileSync(__dirname+'/firepad.js').toString().replace('return firepad.Firepad;', 'firepad.Firepad.FirebaseAdapter = firepad.FirebaseAdapter; return firepad.Firepad;').replace('= global.CodeMirror', '= window.CodeMirror || global.CodeMirror');
Firepad.CodeMirrorSource = fs.readFileSync(__dirname+'/codemirror.js');
/**
* Node Firepad Proxy Loader
*/
Firepad.load = function(ref, callback) {
jsdom.env('<head></head><body><div id="firepad"></div></body>', function (errors, window) {
/**
* Load CodeMirror
*/
var document = document || window.document;
var navigator = navigator || { userAgent:'', platform:'' };
eval(Firepad.CodeMirrorSource+'');
var CodeMirror = window.CodeMirror;
/**
* Load Firepad
*/
eval(Firepad.FirepadSource+'');
// HACK: disable cursor
Firepad.FirebaseAdapter.prototype.sendCursor = function(){};
Firepad.FirebaseAdapter.prototype.setColor = function(){};
/**
* Launch
*/
var codeMirror_ = CodeMirror(window.document.getElementById('firepad'), { lineWrapping: true }, window);
var firepad_ = Firepad.fromCodeMirror(ref, codeMirror_,
{ richTextShortcuts: true, richTextToolbar: true });
if (callback) callback(firepad_, window, errors, document);
});
};
module.exports = Firepad;
然后你可以使用这样的东西:
var FirepadManager = require(__dirname+’/node-firepad’);
FirepadManager.load(firebaseRef, function(firepad, window, errors, document) {
// The callback is called as soon as the Firepad instance is created.
// Hence, you can perform stuff like adding your entities support at this point...
addEntitiesToFirepad(firepad, document);
firepad.on('ready', function() {
if (callback) callback(firepad, window, errors, document);
});
});
如果您走这条路遇到麻烦,请告诉我 (michael@firebase.com)。我也许能帮上忙。祝你好运!