Frage

Wie kann ich den JavaScript-Skript ähnlich wie PHP exit oder die beenden? Ich weiß, es ist nicht die beste Vorgehensweise zu programmieren, aber ich muss.

War es hilfreich?

Lösung

JavaScript Äquivalent für die PHP. BTW es nennt nur exit() (dank 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 '';
}

Andere Tipps

„exit“ Funktionen verlassen in der Regel das Programm oder Skript zusammen mit einer Fehlermeldung wie paramete. Zum Beispiel der (...) in php

die("sorry my fault, didn't mean to but now I am in byte nirvana")

Das Äquivalent in JS ist ein Fehler bei der zu signalisieren, werfen Schlüsselwort wie folgt aus:

throw new Error();

Sie können dies einfach testen:

var m = 100;
throw '';
var x = 100;

x
>>>undefined
m
>>>100

Auch in einfachen Programmen ohne Griffe, Veranstaltungen und so ist es am besten Code in einem „main“ Funktion zu setzen, auch wenn es das einzige Verfahren ist:

<script> 
function main()
{
//code

}
main();
</script>

Auf diese Weise, wenn Sie möchten, das Programm beenden können Sie „Rückkehr“ verwenden.

Es gibt viele Möglichkeiten eine JS oder Knoten Skript beenden . Hier sind die wichtigsten:

// 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);

Wenn Sie in der REPL (dh nach node auf der Kommandozeile ausgeführt wird), Sie können .exit zur Ausfahrt geben.

Wenn Sie kein Interesse daran, dass es ein Fehler schreiben Sie einfach:

fail;

Das wird Ihre Haupt (global) Code von Verfahren zu stoppen. Nützlich für einige Aspekte des Debugging / Testing.

Stellen Sie das debugger; Schlüsselwort in Ihrem JavaScript-Code, in dem Sie die Ausführung gestoppt werden soll. Dann öffnen Sie Ihre Lieblings-Entwickler-Tools Browser und die Seite neu. Nun sollte es automatisch unterbrechen. Öffnen Sie die Quellen Ihrer Werkzeuge. Die debugger; Schlüsselwort markiert ist, und Sie haben die Möglichkeit, die Skriptausführung fortsetzen

Ich hoffe, es hilft.

Weitere Informationen:

In meinem Fall habe ich die window.stop API, die wie Sie auf die X-Taste auf Ihrem Browser ist:

window.stop();

Diese Antwort liefert Details zusätzliche Rahmen zeigen, dass diese und andere frühe Ausscheiden, Ausnahmen, Prozesssteuerung und Ablauf Handhabung Bedarf modular javascripts helfen zu lösen. Lösung bietet Verschluss Beispiele. Diese Antwort geht davon aus, dass die einzelne andere Skripts auf der Seite mag, nachdem das Skript in Frage verlassen hat, um weiterhin ausgeführt.

Live-Beispiel für einfache Lösung hier: 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>

Oben ist ein „CallRunner“, die eine sehr einfache Art und Weise bietet nur kostenlos zu verlassen, indem Sie Ihre Funktion auf die Läufer vorbei.

Die Variablennamen in der Geige kann verwirrend sein, die Funktion „Spaß“ genannt ist der Name innerhalb safetyRun verwendet, um die Funktion zu verweisen wir verlassen versuchen, und exitErr ist der Name tatsächlich vollständig die Funktion laufen wir verweisen verwendet der Ausgang. Auch ein wenig verwirrend ist: einmal die exitErr abgeschlossen ist, noch der Stapelrahmen nicht aus dem Steuerungs-Thread freigegeben, die die Funktion aufgerufen, die wir verlassen. Weil wir immer noch Faden der Kontrolle haben wir sie itteratively Funktionen oder Fehlercodes Aufschieben auf ein Array in der exitErr Funktion und ruft vor der Rückkehr andere Funktionen zu ermöglichen, können ausgeführt werden. Dies ermöglicht es uns, alle Gewichte zu ändern oder zu korrigieren oder ein Zustand versetzt erforderlich, dass wir aufmerksam machen können, was Staaten Fehlerkorrektur Aufmerksamkeit benötigen, einen Protokollbericht oder sogar vollständige herausfordernde Bereinigung senden und autonom die Funktion im Hintergrund beheben und itteratively exitErr nennen bis sie eine Rückkehr anstelle eines Wurfes vervollständigt somit die Funktion so dass wir versuchen, früh abgeschlossen ist, (schlagen sie diese offmainthread tun) zu verlassen. Dieses „Wrapper / Geschirr“ ein guter Weg sein könnte, Browser-Versionen und Sachen zu Beginn einer Funktion, um zu überprüfen, könnten Sie auch hier einen statischen oder dynamischen Import tun, wenn Sie Ihre eigenen Bibliotheken zu verwalten oder was auch immer kann man wirklich denken. Exit ist nur ein fundemental-Funktion, die für Ihre Funktion zur Verfügung gestellt werden kann, indem es so gewickelt wird.

Der Code in der Geige ist ein wenig schmutzig und nicht hübsch, neu es6 Konstrukte können diese schönere machen. Außerdem empfehle ich, dass Sie ein Gurtzeug Generator an der Spitze dieser Funktion aufrufen und das Ergebnis zu einem lokalen var zuweisen, so dass die Funktion, die Sie verlassen wollen weiter unten noch mehr wie der Code aussehen kann. Um ohne Lösen der Stapel Faden Kontrolle zu halten, werden Sie noch brauchen brauchen eine harness.run haben (function (Geschirr) {/ MyVanillaFunc /}) Ihre Vanille-Funktion zu wickeln, da sonst die unten in der Theorie funktionieren soll. Wrapping ist genau das, was ich oben in dem exitEarly Code tat.

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;
    };
}

Die Lösung, die ich hier zur Verfügung gestellt habe, ist diejenige, die ich empfehlen, wenn Ihre Absicht ist es, einen Javascript-Läufer Behälter mit Funktionen wie Ausgang zu bauen, behauptet, Mock und die so gebaut. Ich denke, das ist der bessere Weg ist, diese containership zu bauen und meine Funktionen übertragbar machen.

Wenn Sie nach einem Weg suchen, auf einer Seite Ausführung aller Javascript gewaltsam zu beenden, ich bin nicht sicher, es ist ein offiziell sanktionierte Weg, dies zu tun - es scheint, wie die Art von Sache, die ein Sicherheitsrisiko darstellen könnte (obwohl um ehrlich zu sein, kann ich nicht daran denkt, wie es aus der Spitze von meinem Kopf wäre). Normalerweise in Javascript, wenn Sie Ihren Code wollen laufen zu stoppen, return Sie nur aus, was auch immer Funktion ausgeführt wird. (Die return Anweisung ist optional, wenn es das letzte, was in der Funktion ist und die Funktion sollte einen Wert zurückgeben) Wenn es aus irgendeinem Grund ist der Rückkehr ist nicht gut genug für Sie, sollten Sie vielleicht noch näher auf die Frage bearbeiten, warum Sie Halten Sie es brauchen, und vielleicht kann jemand eine alternative Lösung anbieten.

Beachten Sie, dass in der Praxis einfach Javascript Dolmetscher die meisten Browser stoppt das aktuelle Skript ausgeführt wird, wenn sie einen Fehler stoßen. So können Sie so etwas wie den Zugriff auf ein Attribut eines unset Variable tun:

function exit() {
    p.blah();
}

und es wird wahrscheinlich das Skript abbrechen. Aber Sie sollten nicht rechnen, dass, weil es überhaupt nicht Standard, und es scheint wirklich wie eine schreckliche Praxis.

EDIT : OK, vielleicht war dies nicht so eine gute Antwort im Hinblick auf Ólafur Jahren. Obwohl die die() Funktion er grundsätzlich in Verbindung mit meinem zweiten Absatz implementiert, das heißt, es wirft nur einen Fehler.

UPDATE: Das funktioniert, solange Sie es nicht tun catch

throw window.location.assign('dead.html');

Diese kleine Funktion kommt ziemlich nahe PHP-Ausgang zur Nachahmung (). Wie bei den anderen Lösungen, fügen Sie nicht alles andere.

function exit(Msg)
    {
    Msg=Msg?'*** '+Msg:'';
    if (Msg) alert(Msg);
    throw new Error();
    } // exit

Erstellen Sie einfach einen BOOL Zustand, keine Notwendigkeit für komplizierten Code hier ..

Wenn auch nur, wenn Sie es auf true drehen / oder mehrfach, es wird sowohl geben Sie eine Zeile der Lösung / nicht mehrfach - im Grunde einfach.

throw "";

Ist ein Missbrauch des Konzepts aber wahrscheinlich die einzige Option. Und, ja, werden Sie alle Event-Listener zurücksetzen müssen, ebenso wie die akzeptierte Antwort erwähnt. Sie würden auch einen einzigen Zugangspunkt benötigen, wenn ich Recht habe.

Auf der Spitze davon: Sie haben eine Seite wollen die per E-Mail an Dich meldet, sobald es wirft - man zum Beispiel Raven / Sentry für diese verwenden kann. Aber das bedeutet, können Sie sich Fehlalarme produzieren. In einem solchen Fall müssen Sie auch die Standard-Handler aktualisieren solche Ereignisse oder setzen solche Ereignisse zu filtern, auf ignorieren auf Sentry Armaturenbrett.

window.stop ();

Das funktioniert nicht beim Laden der Seite. Es stoppt Decodierung der Seite als auch. So können Sie nicht wirklich verwenden Benutzer eine Javascript-freie Variante Ihrer Seite anbieten zu können.

Debugger;

Stoppt die Ausführung nur mit Debugger geöffnet. Funktioniert prima, aber nicht lieferbar.

Ich denke, diese Frage beantwortet wurde, klicken Sie hier Mehr Informationen. Unten ist die kurze Antwort darauf gebucht wird.

throw new Error("Stop script");

Sie können Ihren Browser auch Bruchstellen hinzufügen verwendet, jeder Browser ähnlich ist, überprüft Info unten für Ihren Browser.

Für Chrome Bruchstellen Informationen klicken hier
Für Firefox Bruchstellen Informationen klicken hier
Für Explorer Bruchstellen Informationen klicken
Für Safari Bruchstellen Informationen klicken hier

Wenn Sie eine nicht definierte Funktion im Skript verwenden, dann wird Skript durch „Uncaught Reference“ zu stoppen. Ich habe durch folgenden Code versucht, und die ersten zwei Zeilen ausgeführt.

Ich denke, dies ist der beste Weg ist, um das Skript zu stoppen. Wenn es eine andere Möglichkeit gibt, dann bitte mich kommentieren. Ich möchte auch eine andere beste und einfache Art und Weise kennen zu lernen. BTW, ich habe nicht Ausfahrt bekommen oder eingebaute Funktion in Javascript sterben wie PHP für das Skript zu beenden. Wenn jemand weiß, dann lass es mich wissen.

alert('Hello');

document.write('Hello User!!!');

die();  //Uncaught ReferenceError: die is not defined

alert('bye');

document.write('Bye User!!!');

Dies ist ein Beispiel, dass, wenn eine Bedingung gibt, dann das Skript beenden. Ich verwende in meiner SSE Client-Seite JavaScript aktiviert, wenn die

<script src="sse-clint.js" host="https://sse.host" query='["q1,"q2"]' ></script>

canot rechts von JSON Parse ...

analysiert werden
if( ! SSE_HOST  ) throw new Error(['[!] SSE.js: ERR_NOHOST - finished !']);

... wie auch immer die allgemeine Idee ist:

if( error==true) throw new Error([ 'You have This error' ,  'At this file', 'At this line'  ]);

Dies wird beendet / die Ihr JavaSript Skript

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top