错误的highcharts导出服务器js脚本错误代码

时间:2013-01-30 02:23:14

标签: highcharts

当按照here调用highcharts-convert.js时,我注意到即使输入json无效,它也会返回成功代码0。例如:

karl$ phantomjs ./app/javascript/highcharts-convert.js -infile ./spec/fixtures/invalid_input.json -outfile /var/folders/q2/m5hn1wq54zg33s7jv31d1p280000gq/T/hello.82829.54862.png -width 300
SyntaxError: Parse error

ReferenceError: Can't find variable: options

  phantomjs://webpage.evaluate():57
    phantomjs://webpage.evaluate():99
      phantomjs://webpage.evaluate():99
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      loading images...
      karl$ echo $?
      0

如果没有正确的错误代码,在我看来,我的工作无法知道命令失败。我错过了什么吗?

THX。

-karl

2 个答案:

答案 0 :(得分:2)

在方法page.evaluate()中,脚本尝试设置选项变量,请参阅highcharts-convert.jsline#166。很可能你的Json文件没有从文件系统中正确读取。尝试在此处设置console.log()语句highcharts-convert.jsL#148以验证文件是否已被读取。

你是对的,此时应该提供一条错误信息。

<强>更新 在输入文件中出现语法错误时,似乎抛出了错误。这是在PhantomsJS page.evaluate()函数中检测到的。出于安全原因,这个执行是沙箱。

从我的知识中获取该沙箱的唯一方法是使用console.log()并为page.onConsoleMessage设置回调函数。

你可以这样做:

HC.optionsParsed = 'Highcharts.options.parsed';

window.optionsParsed = false;

page.onConsoleMessage = function (msg) {
    console.log(msg);
    /*
    * Ugly hacks, but only way to get messages out of the 'page.evaluate()'
    * sandbox. If any, please contribute with improvements on this!
    */
    if (msg === HC.optionsParsed) {
        window.optionsParsed = true;
    }
};

// later on in page evaluate
svg = page.evaluate(function (width, constr, optionsStr, callbackStr, pdfOutput) {
    var imagesLoadedMsg = 'Highcharts.images.loaded', $container, chart,
                nodes, nodeIter, elem, opacity;

    // dynamic script insertion
    function loadScript(varStr, codeStr) {
        var $script = $('<script>').attr('type', 'text/javascript');
        $script.html('var ' + varStr + ' = ' + codeStr);
        document.getElementsByTagName("head")[0].appendChild($script[0]);

        // HERE IT HAPPENS, run console.log with a specific message to set window.Optionsparsed to true
        if (window[varStr] !== undefined) {
            console.log('Highcharts.' + varStr + '.parsed');
        }
 }
// ... SCRIPT CONTINUES ... 

当page.evaluate方法结束时。我们可以检查window.optionsParsed是否设置为true。如果没有提出警告并退出。

if (!window.optionsParsed) {
    console.log('ERROR - the options variable was not available, contains the infile an syntax error? see' + input);
    phantom.exit();
}

我还更新了Github上的highcharts-convert.js脚本。

答案 1 :(得分:0)

我遇到了类似的问题100%同样的问题请检查你的highstock.js文件类型,如果它是二进制文件请按照以下步骤,你的问题得到解决

curl http://code.highcharts.com/stock/highstock.js -o exports-server / phantomjs / highstock.js.gz

gzip -d exports-server / phantomjs / highstock.js.gz