2011-09-19 3 views
1

.js 파일 대신 문자열에서 가져온 javascript는 오류가 포함 된 스크립트 파일의 URL을 참조하기 때문에 디버그하기가 어렵습니다. 많은 문자열이 도입되면 어떤 문자열 (스크립트)이 오류의 원인인지 알기가 어렵습니다.오류 URL은 동적으로 삽입 된 자바 스크립트 기능에 유용하지 않습니다. 사용자 제공 참조

많은 수의 개체가 있습니다. 각 객체에는 JavaScript 함수를 동적으로 정의하는 문자열이 있습니다. 일단 함수가 정의되면 동적으로 정의 된 함수를 실행하는 동안 발생하는 오류가 어떤 문자열/객체가 오류의 원인인지 나타내는 정보를보고하는 방법이 필요합니다.

예 1 : 평가를 사용하여 기능을 주사()

당신이 평가 후면 사용하는 경우() 자바 스크립트로 문자열을 삽입 할 수는 오류 URL이 정의되어 있지 않습니다.

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

그래서이 경우, 오류 URL이 정의되지 :

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

다음과 같은 오류를 얻을 것입니다.

예 2 : 대신 평가의 경우 스크립트 태그

를 사용하여 주입 기능, 당신은 자바 스크립트로 문자열을 삽입하는 스크립트 태그를 사용하여 오류 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 = 기능 (메시지, URL, 선) {} 어떤이에 대한

답변

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')}}"; 
+0

이 매우 도움이되었다 이러한 예에서

오류는 사용보고되었다. 관련된 문제는 (웹킷에서) 동적으로 삽입 된 자바 스크립트 문자열이 디버거 드롭 다운 메뉴에서 filename.js 대신 "(프로그램)"으로 나타나는 디버거에 있습니다. 디버거에서 사용할 사용자 정의 이름을 지정하는 방법이 있습니까? – vitabot1

+0

불행히도 자바 스크립트 디버거는 매우 다릅니다. 이것을 성취하기가 어려울 것이다. – Joe