1

エラーはエラーを含むスクリプト ファイルの URL を参照するため、.js ファイルではなく文字列から導入された JavaScript はデバッグが困難です。多くの文字列が導入されている場合、どの文字列 (スクリプト) がエラーの原因であるかを特定するのは困難です。

私はたくさんのオブジェクトを持っています。各オブジェクトには、JavaScript 関数を動的に定義する文字列があります。関数を定義したら、これらの動的に定義された関数の実行中に発生したエラーに対して、どの文字列/オブジェクトがエラーの原因であるかを示す何らかの情報を報告する方法が必要です。

例 1: eval() を使用して関数を挿入する

eval() を使用して文字列を JavaScript として挿入すると、エラー URL は未定義になります。

str = "test_fn = function(){undefined_fn();}";
eval(str);
test_fn();

次のエラーが発生します。

message: "ReferenceError: Can't find variable: undefined_fn"
url: undefined
line: 1

したがって、この場合、エラー URL は未定義です。

例 2: script タグを使用して関数を挿入する

eval の代わりに script タグを使用して文字列を javascript として挿入すると、エラー URL は html ファイルを参照します。

str = "test_fn = function(){undefined_fn();}";
if(!document.head) document.head = document.getElementsByTagName('head')[0];
var elem = document.createElement('script');
elem.text = str;
document.head.appendChild(elem);
test_fn();

次のエラーが発生します。

message: "ReferenceError: Can't find variable: undefined_fn"
url: "testpage.html"
line: 1

したがって、この場合、エラー URL は html ページです。

これらの動的に定義された関数の実行中にエラーが発生した場合、どの文字列がエラーの原因であるかを示す何らかの情報を開発者に報告する方法が必要です。サーバーを使用して多数のソース ファイルを動的に生成し、各ファイルに script.src を設定できることはわかっていますが、何百ものスクリプト ファイルを参照することは避けたいと考えています。報告された URL を変更する方法や、開発者に報告できる追加情報を渡す方法を理解したいと思います。

クロス ブラウザー ソリューションを希望しますが、これは開発専用であるため、必要ありません。

これらの例のエラーは、window.onerror = function(message, url, line) {} を使用して報告されました。

4

1 に答える 1

1

これはどうですか:

function SuperError(msg, location) {
   this.message = msg;
   this.url = location;
}

str = "test_fn = function(){try { undefined_fn(); } catch(e) {throw new SuperError('undefined_fn is undefined', 'in dynamic script head')}}";
于 2011-09-19T20:28:00.210 に答える