크롬 및 파이어폭스의 Javascript에서 Cryptic "스크립트 오류"가 보고됨
웹사이트에서 Javascript 오류를 검출하여 백엔드로 전송하여 보고하는 스크립트를 가지고 있습니다.최초로 발생한 에러, 상정 회선 번호, 시각을 보고합니다.
다음을 포함하도록 편집:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:fb="http://www.facebook.com/2008/fbml">
...
<script type="text/javascript">
//<![CDATA[
// for debugging javascript!
(function(window){
window.onerror = function(msg, url, ln) {
//transform errors
if (typeof(msg) === 'object' && msg.srcElement && msg.target) {
if(msg.srcElement == '[object HTMLScriptElement]' && msg.target == '[object HTMLScriptElement]'){
msg = 'Error loading script';
}else{
msg = 'Event Error - target:' + msg.target + ' srcElement:' + msg.srcElement;
}
}
msg = msg.toString();
//ignore errors
if(msg.indexOf("Location.toString") > -1){
return;
}
if(msg.indexOf("Error loading script") > -1){
return;
}
//report errors
window.onerror = function(){};
(new Image()).src = "/jserror.php?msg=" + encodeURIComponent(msg) + "&url=" + encodeURIComponent(url || document.location.toString().replace(/#.*$/, "")) + "&ln=" + parseInt(ln || 0) + "&r=" + (+new Date());
};
})(window);
//]]>
</script>
이 스크립트 때문에 제 사이트에서 발생하고 있는 Javascript 에러에 대해 잘 알고 있습니다.가장 큰 범죄자 중 하나는 Chrome 10+와 Firefox 3+의 0행 "스크립트 오류"입니다.이 에러는 Internet Explorer에 존재하지 않습니다(또는 다른 에러라고도 불립니다).
수정(2013년 5월 23일):이 「스크립트 에러, 0 행」에러는, IE7 및 그 외의 버전에 표시됩니다.이전에는 이 동작이 없었기 때문에 최근의 IE 보안 패치에 의한 것일 수 있습니다.
이 에러의 의미나 원인을 알고 있는 사람이 있습니까?전체 페이지 로드의 약 0.25%에서 발생하며 보고된 오류의 절반을 나타냅니다.
Firefox, Safari 및 Chrome에서는 예외가 브라우저의 동일한 원본 정책을 위반할 때(즉, 현재 페이지의 도메인이 아닌 다른 도메인에서 호스팅되는 스크립트에서 오류가 발생할 때) "스크립트 오류"가 발생합니다.
이 동작은 스크립트가 외부 도메인에 정보를 유출하지 않도록 하기 위한 의도적인 동작입니다.로서, 방문했다고 해 보세요.evilsite.com
, , , , ,가 있는 합니다.<script src="yourbank.com/index.html">
(JS의 경우 html의 경우).이로 인해 스크립트 오류가 발생하지만 로그인 여부를 알 수 있기 때문에 오류가 흥미롭습니다.있는할 수 .'Welcome Fred...' is undefined
그렇지 않은 에는 " " ", " "일 수 있습니다.'Please Login ...' is undefined
그런 식으로요
evilsite.com가 상위 20개 정도의 은행 기관을 대상으로 이 작업을 수행한다면, 그들은 귀하가 방문하는 은행 사이트를 상당히 잘 파악하고 훨씬 더 표적화된 피싱 페이지를 제공할 수 있을 것입니다.(물론 이것은 하나의 예에 불과합니다.그러나 브라우저가 어떤 데이터도 도메인 경계를 넘어서는 안 되는 이유를 알 수 있습니다.)
Safari, Chrome 및 Firefox의 최신 버전에서 이 기능을 테스트했습니다.IE9은 x-origin 예외를 동일한-origin 예외와 동일하게 취급합니다(Opera는 on-error를 지원하지 않습니다).
말들의 입에서:예외를 onerror()에 전달할 때 오리진을 확인하는 WebKit 소스입니다.파이어폭스 소스를 확인합니다.
업데이트 (11년 10월 21일):이 문제를 추적하는 Firefox 버그에는 이 동작을 유도한 블로그 게시물에 대한 링크가 포함되어 있습니다.
업데이트(12/2/14): 스크립트태그에 속성을 지정하여 서버가 적절한 CORS HTTP 응답 헤더를 전송함으로써 일부 브라우저에서 완전한 교차 도메인 오류 보고서를 활성화할 수 있습니다.
미래에 이 문제에 직면하게 될 사람들을 위한 업데이트입니다. broofa가 정답이며 이에 대한 회피책은 없습니다.
분명히 다른 사람이 이 제한에 걸려 수정을 요구하는 버그가 Firefox: Bug 69301 및 WebKit: Bug 70574에 접수되었습니다.
좋은 소식은 Firefox 13 릴리즈에서 이 버그가 해결되었다는 것입니다.사용 방법은 다음과 같습니다.
<script src="http://somremotesite.example/script.js" crossorigin>
crossorigin
crossorigin=anonymous
는 브라우저에 credential을 송신하지 않고 스크립트의 CORS 페치를 실행하도록 지시합니다.
'아까보다'를 .Access-Control-Allow-Origin
도메인과 값(
Access-Control-Allow-Origin: http://myhomesite.example
Access-Control-Allow-Origin: *
그렇지 않으면 브라우저가 스크립트 로드를 취소합니다.
Apache의 경우:
Header set Access-Control-Allow-Origin "*"
(기타 Web 서버에 대해서는, CORS 의 예를 참조해 주세요).
스크립트를 PHP로 전송하는 경우:
header('Access-Control-Allow-Origin', 'http://myhomesite.example');
의 모든 오류는 script.display에 의해 됩니다.window.onerror
핸들러에 메시지, 파일 및 행의 상세를 나타냅니다.
WebKit 버그는 아직 수정되지 않았지만 패치가 제안되었습니다(같은 솔루션을 사용하고 있습니다).바라건대 곧 수정이 발표될 것이다.
CORS에 대한 자세한 내용은 http://enable-cors.org/를 참조하십시오.
이건 알아내는 데 꽤 시간이 걸렸어요
이 문제를 해결하기 위해 Ajax를 통해 문서 본문 전체를 서버에 덤프하여 문제를 해결하는 등 많은 작업을 수행했습니다.
파이어폭스에서는 아직 스크립트 에러의 원인을 알 수 없지만(BTW와 함께 Ajax logger에서는 그렇게 표시됨) Chrome에서는 그 원인을 좁힐 수 있었습니다.
드럼 롤...
Google Chrome의 자동 번역 기능입니다.
영어를 하는 많은 사람들은 이 기능을 모르겠지만, 그것을 테스트하기 위해 크롬을 사용하여 영어가 아닌 사이트를 방문한다고 생각합니다.또는 Chrome 옵션을 사용하면 브라우저 언어를 변경할 수 있습니다.영어 이외의 것으로 변경하고 브라우저를 재시작한 후 영어 사이트를 방문합니다.
Chrome이 페이지를 번역해 주길 원하는지 묻는 상단에 있는 바가 있을 것입니다.
어쨌든 이 경우 번역자가 스크립트 태그를 문서 본문에 삽입하고 (여기서 추측) JS 기반 시스템을 사용하여 콘텐츠를 Google 서버로 전송하고 번역하도록 하기 때문에 문제가 발생했습니다.
콘솔 오류는 참조되지 않은 것이었는데 window.onerror로 전송된 메시지는 "스크립트 오류"였습니다.
어쨌든 치료법이 있어요.
http://googlewebmastercentral.blogspot.com/2007/12/answering-more-popular-picks-meta-tags.html
<meta name="google" content="notranslate"/>
이렇게 하면 다음 두 가지 작업을 수행할 수 있습니다(알고 있는 한 더 많은 작업을 수행할 수 있습니다).
a) Chrome에서 번역바가 뜨지 않도록 합니다.
b) translate.google.com 를 사용한 페이지 변환을 무효로 합니다.
어쨌든 저희 상황에서는 이렇게 해서 저희가 겪고 있던 '스크립트 오류' 문제가 많이 해결되었습니다.
이 투고의 철자 오류에 대해 사과드립니다.저는 Chrome에서 아직 영어가 아닌 모드로 이 글을 쓰고 있으며, 철자 검사기가 영어로 설정되어 있지 않습니다.) 전환 시간입니다.
맛있게 드세요!
%가 낮기 때문에 일반 사용자가 아니라고 가정할 수 있습니다.사용자 스크립트나 북마크릿을 가진 사용자 또는 웹사이트의 콘솔을 만지는 사용자일 수 있습니다.그것이 일어나는 페이지의 HTML 전체를 가지는 것은 이 이론을 테스트하는 데 도움이 될 수 있다.완전한 오류도 마찬가지입니다.URL이 표시됩니다.항상 같은 건가요?라인이 정말 0인가요, 아니면 정의되지 않은 건가요?
하는 것은 이 아니라고 , 은 에러로부터 하고 있을 이 있습니다.0 은 0 。parseInt(ln || 0)
에러가 실제로 페이지에 없는 경우(위의 예 참조).
이러한 에러를 무시하는 행이 JavaScript에 있는지(아마도 자신의 코드에 의한 것이 아니기 때문에), 또는 서버측 코드로 그것들을 개별적으로 취급하는 행이 있는지를 확인하려면 , imo 를 추가하는 것이 좋습니다.
=== EDIT === 연결됨: http://www.xavierm02.net/AZE/ user.disc 파일을 설치합니다(Chrome에서 설치했지만 Firefox에서도 작동합니다).그런 다음 동일한 브라우저에서 html 페이지를 엽니다.에러가 표시됩니다(서버에의 리포트 인스톨을 변경했을 뿐입니다만, 페이지에 써집니다).회선번호는 0 입니다.
같은 문제가 있었습니다.스크립트가 서브도메인에 의해 처리되어 같은 발신기지 제한을 받고 있습니다.하지만, 저는 이것을 다음과 같이 해결했습니다.
1) 다음과 같이 모든 스크립트태그를 추가합니다.
<script type="text/javascript" src="http://subdomain.mydomain.tld" crossorigin="*.mydomain.tld" />
2) 모든 vhost 내부에 다음 항목을 추가하여 apache httpd.conf를 변경합니다(enbable mod_conf).
<IfModule mod_headers.c>
Header add Access-Control-Allow-Origin "*.mydomain.tld"
</IfModule>
이게 도움이 됐으면 좋겠는데...
편집
서버 중 하나에서 이 기능을 실행할 수 없었던 것은
*.mydomain.tld
타고
*
*가 확장 정보를 피싱할 수 있는 결함을 알고 있어야 합니다.CORS, same-origin, img & fonts, cdn에 관한 문서는 입수할 수 있지만 스크립트 태그의 크로스origin 상세 정보는 거의 입수할 수 없습니다.
드디어 이 실마리를 짚어주는 좋은 기사.https://danlimerick.wordpress.com/2014/01/18/how-to-catch-javascript-errors-with-window-onerror-even-on-chrome-and-firefox/
Chrome에서 error (가file://
파이어폭스아마도 크롬을 지나치게 열성적으로 보호했을 것이다.
HTTP를 통해 동일한 HTML과 Javascript를 로드하면 모두 문제가 없습니다.
아래는 어떻습니까?스크립트 에러는 JavaScript에서는 사용할 수 없기 때문에 특정 케이스를 분리하여 가능한 한 처리해 주십시오.
window.onerror = function (msg, url, lineNo, columnNo, error) {
var string = msg.toLowerCase();
var substring = "script error";
if (string.indexOf(substring) > -1){
alert('Script Error: See Browser Console for Detail');
} else {
alert(msg, url, lineNo, columnNo, error);
}
return false;
};
iOS의 Chrome과 Firefox는 모두 Safari Webview를 기반으로 하지만 로드되는 각 페이지에 다수의 사용자 지정 스크립트를 삽입합니다. 중 , 그 스크립트는 「」, 「」, 「」로 보고됩니다.Script error on line 0
(브라우저는 스크립트카운트도 오리진으로서 삽입했습니다.)
이 다른 SO 스레드를 추적하여 문서화한 결과 iOS의 Chrome과 Firefox 모두 SVG 요소를 올바르게 처리하는 커스텀스크립트에 문제가 있습니다.따라서 이 스레드의 다른 모든 답변과 함께 다음과 같이 처리됩니다.SVG 요소를 사용하여<a>
<svg>
있으면, 「」가 .Script errors
및 Firefoxi에서 됩니다.OS Chrome i iOS Firefox 。
Safari(WebKit)에서 무엇이 수정되었는지 알려드리겠습니다.JS 콜백 루틴을 실제로 페이지에 배치하면 전체 정보가 표시됩니다.태그를 사용하여 .js 파일에 포함시키면 "스크립트 오류" 오류가 발생합니다(리넨 번호 없음 등).
아마 Broofa가 말한 것과 관련이 있을 것이다.
페이지 안에 작은 콜백이 있고, 페이지 밖에 나머지 파일이 있습니다.
검색을 좀 해봤는데 스크립트 오류는 검색 요청 파일을 로드하는 데 문제가 있음을 의미합니다.이는 클라이언트 측의 캐시 문제일 수도 있고 과부하로 인한 서버 문제일 수도 있습니다.
스크립트 자체가 로드할 수 없는 파일이기 때문에 0행에서 에러가 발생하는 것과 같은 원인으로 생각할 수 있습니다.
<script type="text/javascript" src="somescript.js"></script>
나는 경험했다.
스크립트 오류행 0
고객 브라우저에 오류가 발생했을 때 잠시 동안 서버에 오류가 보고되었습니다.어제 처음으로 (소개 후)"use strict";
javascript에서) 이 문제를 Windows 7의 Safari와 Chrome에서 이 문제를 재현할 수 있었습니다.코드를 alert() 문으로 버리면 정의되지 않은 변수의 사용으로 이 오류를 추적했습니다.xx = 123;
여기서 xx는 a로 정의되지 않습니다.var
★★★★★★ 。
Safari는 이를 다음과 같이 보고했습니다.
ReferenceError: strict 모드에서는 글로벌 속성 'xx'를 암묵적으로 생성할 수 없습니다.
window.onerror 함수가 검출되었습니다.
스크립트 오류행 0
"소스코드"가 을 알 수 있습니다."Script Error."
따라서 사이트의 일부 스크립트에서 다음과 같은 오류가 발생할 수 있습니다.
throw new Error('Script Error.');
아마도 이 문장은 Firefox와 Chrome에서만 도달합니다.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 어떤 ★★★★★★★★★★★★★★★.eval()
언급URL : https://stackoverflow.com/questions/5913978/cryptic-script-error-reported-in-javascript-in-chrome-and-firefox
'source' 카테고리의 다른 글
Mariadb 연결 클라이언트:mysql 8.0에서 사용자(암호: NO 사용)에 대한 액세스가 거부되었습니다. (0) | 2022.09.08 |
---|---|
JavaScript 체크박스를 켜거나 끄다 (0) | 2022.09.08 |
스파크 오류 - 지원되지 않는 클래스 파일의 줄자 버전 (0) | 2022.09.08 |
테이블 내의 각 외부 키 ID 인스턴스 수를 카운트하려면 어떻게 해야 합니까? (0) | 2022.09.08 |
MySQL 5.7.30에 비해 마리아DB 10.4.13의 퍼포먼스가 느리다 (0) | 2022.09.08 |