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 () ステートメントを設定して 、ファイルが読み取られたことを確認してください。

おっしゃる通り、この時点でエラー メッセージを表示する必要があります。

更新 入力ファイルに構文エラーがあるときにエラーがスローされるようです。これは、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 exporting-server/phantomjs/highstock.js.gz

于 2013-05-09T10:57:34.147 に答える