2014-05-06 51 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