를 종료하는 방법 스크립트에서 JavaScript?
-
23-08-2019 - |
문제
할 수 있는 방법을 종료 자바 스크립트는 훨씬 다음과 같 PHP exit
나 die
?나는 그것을 알지 않고 최고의 프로그래밍을 연습만 내가 필요합니다.
해결책
PHP의 JavaScript에 해당합니다 die
. btw 그것은 단지 전화를합니다 exit()
(감사합니다 Splattne) :
function exit( status ) {
// http://kevin.vanzonneveld.net
// + original by: Brett Zamir (http://brettz9.blogspot.com)
// + input by: Paul
// + bugfixed by: Hyam Singer (http://www.impact-computing.com/)
// + improved by: Philip Peterson
// + bugfixed by: Brett Zamir (http://brettz9.blogspot.com)
// % note 1: Should be considered expirimental. Please comment on this function.
// * example 1: exit();
// * returns 1: null
var i;
if (typeof status === 'string') {
alert(status);
}
window.addEventListener('error', function (e) {e.preventDefault();e.stopPropagation();}, false);
var handlers = [
'copy', 'cut', 'paste',
'beforeunload', 'blur', 'change', 'click', 'contextmenu', 'dblclick', 'focus', 'keydown', 'keypress', 'keyup', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'resize', 'scroll',
'DOMNodeInserted', 'DOMNodeRemoved', 'DOMNodeRemovedFromDocument', 'DOMNodeInsertedIntoDocument', 'DOMAttrModified', 'DOMCharacterDataModified', 'DOMElementNameChanged', 'DOMAttributeNameChanged', 'DOMActivate', 'DOMFocusIn', 'DOMFocusOut', 'online', 'offline', 'textInput',
'abort', 'close', 'dragdrop', 'load', 'paint', 'reset', 'select', 'submit', 'unload'
];
function stopPropagation (e) {
e.stopPropagation();
// e.preventDefault(); // Stop for the form controls, etc., too?
}
for (i=0; i < handlers.length; i++) {
window.addEventListener(handlers[i], function (e) {stopPropagation(e);}, true);
}
if (window.stop) {
window.stop();
}
throw '';
}
다른 팁
"종료"기능은 일반적으로 오류 메시지와 함께 매개 변수로 프로그램이나 스크립트를 종료합니다. 예를 들어, php에서 다이 (...)
die("sorry my fault, didn't mean to but now I am in byte nirvana")
JS의 동등한 것은 던지다 다음과 같은 키워드 :
throw new Error();
이것을 쉽게 테스트 할 수 있습니다.
var m = 100;
throw '';
var x = 100;
x
>>>undefined
m
>>>100
핸들, 이벤트 등이없는 간단한 프로그램에서도 코드를 유일한 절차 일 때도 코드를 "기본"기능에 넣는 것이 가장 좋습니다.
<script>
function main()
{
//code
}
main();
</script>
이런 식으로 프로그램을 중지하려면 "반환"을 사용할 수 있습니다.
거기 있습니다 여러 가지 방법 JS 또는 노드 스크립트를 종료하려면 가장 관련성이 있습니다.
// This will never exit!
setInterval((function() {
return;
}), 5000);
// This will exit after 5 seconds, with signal 1
setTimeout((function() {
return process.exit(1);
}), 5000);
// This will also exit after 5 seconds, and print its (killed) PID
setTimeout((function() {
return process.kill(process.pid);
}), 5000);
// This will also exit after 5 seconds and create a core dump.
setTimeout((function() {
return process.abort();
}), 5000);
당신이 있다면 대답 (즉, 달리기 후 node
명령 줄에서) 입력 할 수 있습니다 .exit
나가기 위해서.
당신이 그것이 오류라고 신경 쓰지 않으면, 그냥 쓰기 만하면됩니다.
fail;
그것은 당신의 메인 (글로벌) 코드가 진행되는 것을 막을 것입니다. 디버깅/테스트의 일부 측면에 유용합니다.
두는 debugger;
실행을 중지하려는 JavaScript 코드의 키워드. 그런 다음 좋아하는 브라우저의 개발자 도구를 열고 페이지를 다시로드하십시오. 이제 자동으로 일시 중지해야합니다. 열기 출처 도구의 섹션 : the debugger;
키워드가 강조되며 스크립트 실행을 재개 할 수있는 옵션이 있습니다.
도움이되기를 바랍니다.
추가 정보 :
내 경우에 나는 사용했다 window.stop
브라우저에서 X 버튼을 클릭하는 것과 같은 API :
window.stop();
이 대답은 세부 정보를 제공하여 여분의 프레임워크를 해결하는 데 도움이됩니다 이것과 다른 조기 종료,예외 프로세스 제어,그리고 순차적인 함수 처리 요구에서 모듈 자바스크립트.솔루션을 제공합퍼 예입니다.이 대답에서는 개별적인 것처럼 다른 스크립트가 페이지에서 계속 실행하는 스크립트 후 질문에 종료됩니다.
라이브의 예는 간단한 솔루션이 여기: https://jsfiddle.net/alignedfibers/cpe1o1yy/66/
<script>
var safetyRun = (function(){
var curExecution = null;
var exceptionHandlers = {
cleanup:function(){
/*do exit cleanup*/
console.log("Cleanup could set straglers to {}");
return;
}
}
var exitErr = function(errcode){
curExecution.exNames.push("cleanup");
throw new Error("EarlyExit");
}
var run = function(fun){
curExecution = this;
curExecution.exNames = [];
fun(exitErr);
for ( x in exNames){
exceptionHandlers[x]();
}
return;
}
return run;
})();
var exitThisScript = function(exit){
//write some modular code
console.log("before exit");
exit();
console.log("after exit");
return;
}
safetyRun(exitThisScript);
</script>
위은"CallRunner"을 제공하는 매우 간단한 방법에 의해 무료로 전달 함수를 주자입니다.
변수 이름에서 바이올린을 혼동 될 수 있습니다,함수는"재미"을 사용하는 이름을 내 safetyRun 을 참조하는 기능을 우리가 노력하고 종료하고 exitErr 이름을 참조하는 데 사용되는 기능을 우리는 실행하는 실제적으로 완료합니다.또한 혼란을 조금은:면 exitErr 이 완료되면 스프레임지에서 스레드를 제어하는 함수를 호출한 우리는 종료됩니다.기 때문에 우리가 아직도 실제 우리가 사용할 수 있는 기능 또는 오류 코드를 밀어에서 배 exitErr 기능 및 그들에게 전화 itteratively 반환하기 전에 허용하는 다른 기능을 실행합니다.이것은 있을 변경하는 어떤 무게 또는 정정하거나 설정한 모든 필요한 상태는 우리가 사용할 수 있습니다 경고하는 무엇인 오류 보정 상태,주의가 필요한 보 로그인 보고서 또는 완전한 도전적인 정리고 자율적으로 수정 기능경 및 itteratively 전화 exitErr 완료될 때까지 반환 대신에 던져 따라서 허용하는 기능을 우리가 노력하고 종료 초체,(하는 건 이 offmainthread).이"wrapper/마구"좋은 방법이 될 수있는지 확인하는 브라우저 버전과 재료의 시작에서 기능할 수 있도 할 정적 또는 동적 가져오 여기를 관리하는 경우 자신의 라이브러리 또는 이제까지 당신은 정말 생각할 수 있습니다.출구 하나만 fundemental 함수에서 사용할 수 있도록 설정할 수 있는 함수에 대한 감싸는데,이렇게 하면 된다.
코드에서 바이올린은 조금 더러운지,새로운 es6 구성할 수 있을 만들이 예뻐합니다.또한 추천 호출하는 마구 발전기의 상단에 이 기능 및 할당 그 결과 로컬 var 그래서 당신이 원하는 기능을 종료 할 수상 코드는 아래.을 유지하기 위해서 쓰레드의 통제를 해제하지 않고 스택,당신은 여전히 해야 할 필요가 있다.실행(function(harness){/MyVanillaFunc/})포장의 바닐라 기능,그렇지 않으면 아래 이론에서 작업해야 합니다.포장 정확히 무엇을 했는지에 exitEarly 위 코드.
var rockStarFunction = new function (){
var harness = reducePublicStrapOnFromCache()._url(location);
return function(){ /*wrapper would wrap these internals*/
harness.scriptContextChangeEvent();
harness.imInteligentFunction("{slib_err-15346 : 'Cannot handle request, ::suggest(mesh//abc) exit back to pool'}");
harness.exit();
console.log("You should never get this far");
return true;
};
}
이 솔루션을 제공 여기에 내가 추천하는 경우 당신의 의도를 구축하는 자바 스크립트너 컨테이너 등의 기능을 종료,주장이 조롱과 같은 내장되어 있습니다.내 생각에 이것은 더 나은 건축 방법을 이 컨테이너선 제 기능을 전송 가능.
페이지에서 모든 JavaScript의 실행을 강제로 종료 할 수있는 방법을 찾고 있다면 공식적으로 승인 된 방법이 있는지 확실하지 않습니다. 보안 위험이 될 수있는 종류처럼 보입니다 ( 솔직히 말해서, 나는 그것이 내 머리 꼭대기에서 어떻게 될지 생각할 수 없습니다). 일반적으로 코드가 실행 중지를 원할 때 JavaScript에서 return
실행중인 기능에서. (그만큼 return
진술은 함수의 마지막 것이고 함수가 값을 반환하지 않아야하는 경우 선택 사항입니다. 아마도 누군가가 대체 솔루션을 제공 할 수 있습니다.
실제로 대부분의 브라우저의 JavaScript 통역사는 오류가 발생하면 현재 스크립트 실행을 중단합니다. 따라서 UNSET 변수의 속성에 액세스하는 것과 같은 작업을 수행 할 수 있습니다.
function exit() {
p.blah();
}
그리고 그것은 할 것입니다 아마 스크립트를 중단합니다. 그러나 그것은 모든 표준이 아니기 때문에 그것을 믿어서는 안되며, 실제로 끔찍한 연습처럼 보입니다.
편집하다: 알겠습니다. 아마도 이것은 Ólafur 's에 비추어 그다지 좋은 대답이 아니었을 것입니다. 비록 die()
기능은 기본적으로 내 두 번째 단락을 구현하기 위해 연결된 기능입니다. 즉, 오류가 발생합니다.
업데이트 : 이것은 당신이하지 않는 한 오래 작동합니다 catch
그것!
throw window.location.assign('dead.html');
이 작은 기능은 PHP의 종료 ()를 모방하는 데 매우 가깝습니다. 다른 솔루션과 마찬가지로 다른 것을 추가하지 마십시오.
function exit(Msg)
{
Msg=Msg?'*** '+Msg:'';
if (Msg) alert(Msg);
throw new Error();
} // exit
Bool 조건을 만듭니다. 여기에서 복잡한 코드가 필요하지 않습니다 ..
일단 당신이 그것을 true/ 또는 여러 번 돌리면, 둘 다 하나의 솔루션을 제공합니다.
던지다 "";
개념의 오용이지만 아마도 유일한 옵션 일 것입니다. 그리고 예, 허용 된 답변과 마찬가지로 모든 이벤트 청취자를 재설정해야합니다. 내가 옳다면 단일 입력 지점이 필요합니다.
그 위에 : 당신은 던지 자마자 이메일로 당신에게보고하는 페이지를 원합니다. 예를 들어 Raven/Sentry를 사용할 수 있습니다. 그러나 그것은 당신이 자신을 잘못된 긍정을 생성한다는 것을 의미합니다. 이 경우 Sentry의 대시 보드에서 무시에 그러한 이벤트를 필터링하거나 해당 이벤트를 설정하기 위해 기본 핸들러를 업데이트해야합니다.
window.stop ();
이것은 페이지를로드하는 동안 작동하지 않습니다. 페이지의 디코딩도 중지합니다. 따라서 실제로 사용하여 사용자에게 페이지의 JavaScript가없는 변형을 제공 할 수 없습니다.
디버거;
디버거가 열린 상태에서만 실행을 중지합니다. 훌륭하지만 전달할 수있는 것은 아닙니다.
스크립트에서 정의되지 않은 함수를 사용하면 "uncught referenceError"로 인해 스크립트가 중지됩니다. 코드를 따라 시도했고 첫 두 줄이 실행되었습니다.
나는 이것이 대본을 중지하는 가장 좋은 방법이라고 생각합니다. 다른 방법이 있다면 저에게 댓글을 달아주세요. 나는 또한 또 다른 최고의 방법을 알고 싶습니다. BTW, 나는 스크립트 종료를 위해 PHP와 같은 JavaScript에서 출구 또는 내장 기능을 얻지 못했습니다. 누구든지 아는 사람이라면 알려주세요.
alert('Hello');
document.write('Hello User!!!');
die(); //Uncaught ReferenceError: die is not defined
alert('bye');
document.write('Bye User!!!');
이것은 조건이 존재하면 스크립트를 종료한다는 예입니다. 나는 이것을 내 SSE 클라이언트 측 JavaScript에서 사용합니다.
<script src="sse-clint.js" host="https://sse.host" query='["q1,"q2"]' ></script>
Canot은 JSON PARSE에서 바로 구문 분석 ...
if( ! SSE_HOST ) throw new Error(['[!] SSE.js: ERR_NOHOST - finished !']);
... 어쨌든 일반적인 아이디어는 다음과 같습니다.
if( error==true) throw new Error([ 'You have This error' , 'At this file', 'At this line' ]);
이것은 당신의 javasript 스크립트를 종료/죽습니다