web-dev-qa-db-ja.com

ログにエラーオブジェクトが表示される:実際のエラーデータではなく{"isTrusted":true}

次のようなイベントハンドラがあります。

window.addEventListener('error', function (e) {

    SendLogErrorToServer('Error: ' + e.message +
                         'Error object: ' + JSON.stringify(e) +
                         'Script: ' + e.filename +
                         'Line: ' + e.lineno +
                         'Col: ' + e.colno +
                         'Nav: ' + window.navigator.userAgent));

}, false);

問題は、私が受け取るものが次のようになることです。

Error: Script error.Error object: {"isTrusted":true} Script: Line: 0 Col: 0 Nav: Mozilla/5.0

ご覧のとおり、役に立つ行番号やエラーメッセージはありません。行番号とエラーの詳細を取得するには、何を変更する必要がありますか?

18
frenchie

この場合に注意する必要がある2つのポイントがあります。両方のポイントは互いに独立しており、問題を解決するために修正する必要があります。

最初

直面しているエラーは、 Script Error

「スクリプトエラー」は、異なるOrigin(異なるドメイン、ポート、またはプロトコル)から提供されたJavaScriptファイルからエラーが発生した場合に、ブラウザーがonerrorコールバックに送信するものです。エラーが発生しているにもかかわらず、エラーの内容や発生元のコードがわからないため、苦痛です。

これはJavaScriptのバグではありません

ブラウザは、セキュリティ上の理由から、異なる生成元のスクリプトファイルに由来するエラーを意図的に隠します。スクリプトが、潜在的に機密性の高い情報を、制御できないonerrorコールバックに意図せずに漏らすことを避けるためです。このため、ブラウザはwindow.onerror同じドメインから発生したエラーの洞察。わかっているのは、エラーが発生したことだけです。

この問題を修正するには:

通常のエラーオブジェクトを修正して取得するには、これを確認してください ブログ投稿

第二

Errorオブジェクトを文字列化しようとすると、ほとんどすべてのデータが失われるため、結果はまったく満足のいくものにはなりません。

その理由

JSON.stringifyは列挙可能なプロパティのみを扱いますが、Errorオブジェクトはコンテキストデータを列挙不可能なプロパティに格納します。

この問題を修正するには

多くの解決策がありますが、これは簡単なことです

JSON.stringify(err, ["message", "arguments", "type", "name"])

これにより、必要なプロパティが選択され、文字列が生成されます。

28
Mouneer

「スクリプトエラー」は、おそらく、問題が外部ドメインからスクリプトを実行しようとしたことを意味します。

行番号とエラーの詳細はページにないため、情報はありません。

この質問 への回答でかなり広範囲にカバーされています。

1
user7363719