5

を使用してアプリケーションでjsエラーをキャプチャしていますがwindow.onerror、開発ツールが開かれていない場合はChromeで、ハンドラーurlに渡されるパラメーターはonerror常に開かれたURLと等しくなります。

一方、開発ツールが開いている場合は、js エラーの原因となっurlた正確なファイルを指します。.js

どのように対処しますか?回避策はありますか?

より明確にするために、2 つの結果を次に示します。

  1. Uncaught ReferenceError: a is not defined index:122- これはページを取得した後に受信されました
  2. Uncaught ReferenceError: a is not defined List.js:122- これは、開発ツールを開いた状態で同じページを取得した後に受信されました。これは予想される結果です。テスト用にファイルにa();呼び出しを入れました。List.js

UPD : これは機能テスト (selenium webdriver を使用) のために行われます - さらに調査するために js エラーをキャプチャしたいと考えています。

4

2 に答える 2

1

次のアーキテクチャを考えてみましょう。

window.addEventListener("error", handleException, false);

function handleException(I_sMsg) {

    if (I_sMsg.stack) {
            sMsg = I_sMsg.stack.replaceAll(getBaseURL(), "");
        alert(sMsg);
    } else if (I_sMsg.message) {
        alert(I_sMsg.message);
    }   

    return cancelEvent(I_sMsg);
} 

throw new Error("description");これで、すべてが if ステートメントの最初の部分を通過し、URL を解析するための適切なスタックが得られます。

bibi()また、予期しない例外に対しても機能し、結果として次のメッセージが表示されます (この場合、存在しない関数を呼び出した後)

予期しない例外のスクリーンショット

さらに調査した結果、私のフレームワークは、すべてのアクションがジョブに属している自家製のジョブ管理 (実際にはスタックに示されているように) を使用しています。

ジョブの実行方法は以下(簡略化)

    try {
        oTask.func.apply(oTask.obj, oTask.prms);
    } catch(ex) {
        handleException(ex);
        return false;
    }

したがって、すべての実行がこの単一の try catch ブロック内にカプセル化されることを意味します。ご覧のとおり、例外がキャッチされ、ハンドラーに渡されます。エラーではありません。

他のファイルでは機能していましたが、呼び出しがカプセル化されていたためでしたが、api.js ファイル内では直接、フレームワークによって管理されていない無料の呼び出しでした。

于 2013-04-10T22:12:15.257 に答える