4

phantomjsのドキュメントでは、次のように述べています。

エラー処理 Web ページで発生したエラーを簡単にキャッチするために、それが構文エラーであろうと他のスローされた例外であろうと、WebPage オブジェクトの onError ハンドラが追加されました。このようなハンドラーの例は次のとおりです。

page.onError = function (msg, trace) {
    console.log(msg);
    trace.forEach(function(item) {
        console.log('  ', item.file, ':', item.line);
    })
}

これで、JavaScript 例外のあるサイトがページで開かれた場合、詳細情報 (スタック トレースを含む) が出力されます。

さて、私はいくつかの「壊れた」ページ (javascript が例外を引き起こすページ) を作成しましたが、エラーがスローされますが、トレースには何も表示されません。

誰か助けてくれませんか?

これが私が持っていたケースの例です:

html:

<!docType>
<html><head></head>
<body>
<script src='broken.js'></script> 
</body>
</html>

スクリプト: 壊れた.js

1. // this script is broken at line 5.
2. // 
3. var i=20;
4. 
5. i = somethingThatDontExist
6. 
7. // we will never be here...
8. 
4

2 に答える 2

0

テスト設定で何かを見逃している可能性がありますが、すべて正常に動作しています。PhantomJS 呼び出しが非同期であることを忘れているかもしれません。

ここに私のテスト設定があります:

test.html

<!docType>
<html><head></head>
  <body>
    <script src='broken.js'></script>
  </body>
</html>

壊れた.js

var i = 20;
i = somethingThatDontExist;

testError.js

var page = require('webpage').create();
page.onError = function (msg, trace) {
  console.log(msg);
  trace.forEach(function(item) {
    console.log(' ', item.file, ':', item.line);
  })
}
page.open('test.html',function(){phantom.exit()});
于 2015-01-03T21:08:13.423 に答える
0

これは古い質問ですが、まだ問題があります (私は最近これに遭遇しました)。OPはおそらく古いバージョンを使用していました。

確認事項をいくつか...

1) console.logphantomjs 2.1.1 と 2.5.0 の間で API が変更されました。2.5.0console.logでは最初の引数のみを出力します (2.1.1 ではすべてを出力します)。

安全のために、最初に文字列を作成し、それを単一の引数としてログに記録して、これが単なるログの問題ではないことを確認してください。つまりconsole.log(concatenatedString)、そうではないconsole.log(var1, var2, var3,...)

JSON.stringify(object)オブジェクトと配列を連結する場合に使用します。

2) 私の経験では、phantomjs は、ページ コンテキストでエラーをキャプチャする方法に一貫性がありません。

たとえば、(ページ内で) javascript の catchblockconsole.log('message', error)page.onConsoleMessage.ページコンテキストとphantomjs.

(console.errorとは動作が異なる可能性がありますがconsole.log、テストしていません。)

3)page.onError現時点では、phantomjs 2.5.0 で壊れています。呼び出されることはなく、代わりにエラーが表示されpage.onConsoleMessageますが、エラー オブジェクトは見逃されます (#2 を参照)。

ページに JavaScript エラーがあるかどうかを本当に知りたい場合は、今のところ phantomjs 2.1.1 を使用してください。

page.onErrorpage.onResourceErrorおよびに関して、2.1.1 と 2.5.0 の違いを示す再現コードについては、以下のバグを参照してくださいpage.onConsoleMessage

https://github.com/ariya/phantomjs/issues/14776

于 2017-02-25T18:27:26.340 に答える