5

AngularJS からのコンソール ログ メッセージをインターセプトし、ページの div に表示したいと考えています。PhoneGap アプリで ajax トラフィックをデバッグするには、これが必要です。

これは、キャプチャしたい種類のエラーの例です。

ここに画像の説明を入力

ページ内の div にコンソール エラーとアラートを表示することを試しましたが、Angular のエラー メッセージを傍受しません。

また、回答で提案されているゲームオーバーの解決策も試しました。それも運が悪い。どうやら $http はエラー ログの処理方法が異なるようです。

4

4 に答える 4

1

あなたが試した答えには正しい考えがあると思いますが、間違った方法をオーバーライドしています。hereを読むと、 angularJs が$logの代わりに使用されていることがわかりconsole.logます。インターセプトするには、それらをオーバーライドしてみてください。

このようなもの:

$scope.$log = {
        error: function(msg){document.getElementById("logger").innerHTML(msg)},
        info: function(msg){document.getElementById("logger").innerHTML(msg)},
        log: function(msg){document.getElementById("logger").innerHTML(msg)},
        warn: function(msg){document.getElementById("logger").innerHTML(msg)}
    }

インポート後に必ず実行してくださいangular.js

編集

次に、ファイルconsoleLogの LogProvider 内部クラスのメソッドをオーバーライドします。angular.js

function consoleLog(type) {
  var output ="";
  //arguments array, you'll need to change this accordingly if you want to
  //log arrays, objects etc                       
  forEach(arguments, function(arg) {
    output+= arg +" ";
  });  
  document.getElementById("logger").innerHTML(output);             
}
于 2013-07-04T13:17:55.923 に答える
0

この目的のためにlog4javascriptを使用しました。経由でログオブジェクトを作成します

var log = log4javascript.getLogger('myApp')
log.addAppender(new log4javascript.InPageAppender());

次に、これをvalue依存関係で使用し、必要な場所 (http インターセプターなど) にフックします。

より軽量なアプローチは$rootScope.emit、これらのログメッセージを目に見える div の先頭に追加するコンポーネントをメインページに使用して配置することですが、これには console.log へのすべての呼び出しを変更する (または js で関数を再定義する) 必要があります。 .

于 2013-07-03T13:06:12.993 に答える
0

このメッセージはAngularJSからも表示されないと思います。どの JavaScript にもキャッチされていない例外のように見えます (angular.js は、HTTP 要求が送信される実際の場所であるため、スタックの一番上に表示されます)。

ng.$exceptionHandlerを見てください。それがあなたが興味を持っていると思われるコードであるはずです。そうでない場合は、これらの種類のエラーを監視する方法を示す「JavaScript onerror」をすばやく Web 検索してください。

于 2013-09-14T23:33:16.477 に答える