JavaScriptでスクリプトを終了するにはどうすればよいですか?
-
23-08-2019 - |
質問
PHP のように JavaScript スクリプトを終了するにはどうすればよいですか? exit
または die
?それが最良のプログラミング手法ではないことはわかっていますが、そうする必要があります。
解決
die のJavaScriptの同等rel="noreferrer">。ところでそれだけで 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 '';
}
他のヒント
「出口」機能は通常parameteとしてエラーメッセージとともにプログラムまたはスクリプトを終了します。たとえば死ぬ(...)は、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);
あなたは REPL の(つまり、コマンドラインでnode
を実行した後)、あなたは出口へ.exit
を入力することができます。
あなたはそれだけで書き込みエラーだと気にしない場合:
fail;
これは進行がメイン(グローバル)コードを停止します。 デバッグ/テストのいくつかの側面に便利です。
を配置します。 debugger;
実行を停止したい JavaScript コード内のキーワード。次に、お気に入りのブラウザの開発者ツールを開いて、ページをリロードします。これで、自動的に一時停止するはずです。を開きます 情報源 ツールのセクション:の debugger;
キーワードが強調表示され、スクリプトの実行を再開するオプションが表示されます。
お役に立てれば幸いです。
詳細については、次をご覧ください。
私の場合は、 window.stop
するブラウザの[X]ボタンをクリックするようなものですAPIます:
window.stop();
この答えは、これと他の早期終了、例外、プロセス制御、およびモジュラーJavaScriptのシーケンシャル機能ハンドリングニーズを解決するのに役立ちます余分な枠組みを実証詳細を提供します。ソリューションは、閉鎖の例を提供します。この答えは、個々の問題のスクリプトが終了した後に実行を継続するために、ページ上の他のスクリプトを希望することを前提としています。
ここでは簡単な解決策のライブ例: 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それらを呼び出します。これは私たちがどんな重みを変更したり、修正したり任意の状態は、我々は、エラー訂正状態は注意が必要なものを警告するために使用できることを必要と設定することができるようにされ、exitErrを呼び出すitterativelyログレポート、あるいは完全な挑戦的なクリーンアップを送信し、自律的にバックグラウンドで機能を修正し、それは、このように我々は(このoffmainthreadをやっ示唆)、早期に完全に終了しようとしている機能を許可する代わりに、スローの復帰が完了するまで。この「ラッパー/ハーネス」は、関数の開始時にブラウザのバージョンやものを確認するための良い方法かもしれないあなたがあなた自身のライブラリや、これまで何を本当に考えることができますを管理している場合、あなたもここに静的または動的なインポートを行うことができます。出口は、このようにそれをラップすることにより、あなたの関数のために利用できるようにすることができる唯一のfundemental機能です。
フィドルのコードが少し汚れてきれいではない、新しいES6構築物は、これをきれいにすることができます。また、私はあなたがこの機能のトップにハーネス・ジェネレータを呼び出して、あなたが終了したい機能がより下記のコードのように見えることができますので、地元のVARにその結果を割り当てることをお勧めします。スタックを解除せずにコントロールのスレッドを保つために、あなたはまだそれ以外の場合は、以下の、あなたのバニラの機能をラップするharness.run(機能(ハーネス){/ の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の実行を終了する方法を探しているなら、私はそれを行うには、正式に認可方法があるかわからない - それはセキュリティ上のリスクがあるかもしれない事のようなもののように思えます(正直に言うが、私はそれが私の頭の上からだろうかを考えることはできません)。通常、JavaScriptでは、あなたのコードが実行を停止したいときは、あなただけで実行されているものは何でも関数からreturn
。返却があなたのために、あなたはおそらく、なぜという疑問に詳細を編集する必要があります十分ではありませんいくつかの理由がある場合(これは関数内で最後のものだと関数が値を返す必要がない場合return
文はオプションです)あなたがそれを必要だと思うし、おそらく誰かが代替ソリューションを提供することができます。
彼らは、エラーが発生した場合、実際に、ほとんどのブラウザのJavaScriptインタプリタは、単に現在のスクリプトの実行を停止することに注意してください。だから、あなたが未設定の変数の属性にアクセスするような何かを行うことができます:
function exit() {
p.blah();
}
とは、は、おそらくのスクリプトを中止します。しかし、それはすべての標準ではないので、あなたはそれを当てにはならない、それは本当に恐ろしいの練習のように思える。
の編集の:OK、多分これはオラフルの光の中にこのような良い答えではありませんでした。彼はリンクdie()
機能は基本的に私の第二段落を実装することが、すなわち、それだけでエラーがスローされます。
UPDATE:!これは、限り、あなたはそれをcatch
していないとして働いています。
throw window.location.assign('dead.html');
この小さな関数は、PHPの終了を模倣にかなり近づきます()。他のソリューションと同じように、何かを追加しないでください。
function exit(Msg)
{
Msg=Msg?'*** '+Msg:'';
if (Msg) alert(Msg);
throw new Error();
} // exit
単に、BOOL条件を作成 ここでは、複雑なコードは必要ありません..
もしあなたが真/または複数回にそれを回す一度も、 それは、両方のあなたのソリューション/いない複数の1行を与えます - 基本的にシンプルます。
スロー "";
概念の誤用おそらく唯一のオプションです。そして、はい、あなたは受け入れ答えは言及同じように、すべてのイベントリスナーをリセットする必要があります。私は右だ場合にも、エントリーの単一ポイントが必要になります。
その上に:あなたは、すぐにそれがスローとして電子メールで報告するページをしたい - あなたはこのために例レイヴン/歩哨のために使用することができます。しかし、それは、あなたが自分で偽陽性を作る意味します。このような場合は、あなたもこのようなイベントをフィルタリングまたは歩哨のダッシュボード上無視でこのようなイベントを設定するには、デフォルトのハンドラを更新する必要があります。
window.stop();
このページの読み込み時には動作しません。それだけでなく、ページのデコードを停止します。だから、本当にユーザーにあなたのページのjavascriptのフリーバリアントを提供するためにそれを使用することはできません。
デバッガ;
は、デバッガを開いて、実行を停止します。成果の偉大な作品ではなくます。
私はこの質問が回答されていると思いますが、ここではのクリック詳しくは。以下は、それが掲載されて短い答えです。
throw new Error("Stop script");
あなたはまた、ブレークポイントを追加するには、ブラウザを使用することができます。、すべてのブラウザでは、ブラウザのために、以下の情報をチェックし、似ています。
クロームブレークポイントの情報についてはクリックしてくださいここの
Firefoxのブレークポイントの情報についてはここを
クリックしてください
エクスプローラブレークポイント情報についてはクリックする
Safariのブレークポイントのための情報ここを
スクリプトが原因「キャッチされないにReferenceError」に停止します。 Iコードと実行最初の2行を以下により試みました。
私は、これはスクリプトを停止するための最良の方法だと思います。他の方法があります場合は、私にコメントしてください。私はまた、別の最良かつ簡単な方法を知ってほしいです。ところで、私は、出口を取得したり、スクリプトを終了ための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>
JSONパース...
から右に解析することがcanotif( ! 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スクリプトを死ぬ