2014-05-06 36 views
2

我需要的是定期在数据库中保存firepad的内容(html)。Firepad获取并保存内容

我试图用一个cron服务来保存这些信息,该服务调用一个页面,该页面通过ajax请求将内容发送到执行该工作的第二个php页面。

如果我手动调用此url所有的工作,但如果url被cron服务调用,javascript不会执行。

我该怎么做?

回答

4

不幸的是,现在没有直接的方法来实现这一目标。您对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)。我可能会提供帮助。祝你好运!

+0

感谢您的快速回答,我认为phantomjs是我的问题的最佳解决方案,但我有一个共享主机没有pha​​tomjs支持这项服务。关于提出的第二个解决方案太复杂了。通过简单的json提要获取当前内容将会很好...我会等待这个功能。 – appersiano