1

当调用这里提到的 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

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

谢谢。

-卡尔

4

2 回答 2

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脚本。

于 2013-01-31T09:20:27.490 回答
0

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

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

gzip -d 导出服务器/phantomjs/highstock.js.gz

于 2013-05-09T10:57:34.147 回答