2
我需要的是定期在數據庫中保存firepad的內容(html)。Firepad獲取並保存內容
我試圖用一個cron服務來保存這些信息,該服務調用一個頁面,該頁面通過ajax請求將內容發送到執行該工作的第二個php頁面。
如果我手動調用此url所有的工作,但如果url被cron服務調用,javascript不會執行。
我該怎麼做?
我需要的是定期在數據庫中保存firepad的內容(html)。Firepad獲取並保存內容
我試圖用一個cron服務來保存這些信息,該服務調用一個頁面,該頁面通過ajax請求將內容發送到執行該工作的第二個php頁面。
如果我手動調用此url所有的工作,但如果url被cron服務調用,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);
});
});
如果你走這條路線,並有煩惱,讓我知道(邁克爾@火力點。 COM)。我可能會提供幫助。祝你好運!
感謝您的快速回答,我認爲phantomjs是我的問題的最佳解決方案,但我有一個共享主機沒有phatomjs支持這項服務。關於提出的第二個解決方案太複雜了。通過簡單的json提要獲取當前內容將會很好...我會等待這個功能。 – appersiano