2016-07-29 3 views
1

Ich habe ein Anmeldeformular mit einigen kundenbezogenen Informationen. Wenn das Benutzerformular zur Hälfte ausgefüllt ist und der Benutzer die Registerkarte schließen wird, wird das Popup mit der Option zum Speichern und zum Beenden, Exit ausgelöst.Wie wird Popup ausgelöst, wenn die Browser-Registerkarte in reactjs geschlossen wird?

Ich habe einige Jquery-Lösung. Aber heute funktioniert es nicht in allen Browsern.

JQuery Beispielcode:

'use strict'; 
$(document).ready(function() { 

    $.fn.addEvent = function (obj, evType, fn) { 
    if (obj.addEventListener) { 
     obj.addEventListener(evType, fn, false); 
     return true; 
    } else if (obj.attachEvent) { 
     var r = obj.attachEvent('on'+evType, fn); 
     return r; 
    } else { 
     return false; 
    } 
    }; 

    $.fn.KeepOnPage = function (e) { 
    var doWarn = 1; 
    if (!e) { 
     e = window.event; 
    } 
    if (!e) { 
     return; 
    } 
    if (doWarn == 1) { // and condition whatever you want to add here 
     e.cancelBubble = true; 
     e.returnValue = 'Warning!\n\nNavigating away from this page will delete your text if you haven\'t already saved it.'; 
    } 
    if (e.stopPropagation) { 
     e.stopPropagation(); 
    } 
    }; 

    $.fn.addEvent(window, 'beforeunload', $.fn.KeepOnPage); 
}); 

Aber wir brauchen Lösung in reactjs. Gibt es eine Reaktivbibliothek für den Browser entladen?

Danke, Thangadurai

+0

Sie müssen wahrscheinlich auch "einige string" zu '' Rückkehr zusätzlich zu 'e.returnValue', um die anderen Browsern zu zielen. @ Dannys Antwort ist in diesem Punkt genau richtig. Siehe auch: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload –

Antwort

4

Sie können ein Ereignis-Listener für das 'beforeunload' Ereignis in Ihrem componentDidMount und componentWillUnmount Lifecycle-Funktionen hinzufügen und entfernen.

https://facebook.github.io/react/docs/component-specs.html

https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload

Beispiel:

... 
componentDidMount() { 
    window.addEventListener('beforeunload', this.keepOnPage); 
} 

componentWillUnmount() { 
    window.removeEventListener('beforeunload', this.keepOnPage); 
} 

keepOnPage(e) { 
    var message = 'Warning!\n\nNavigating away from this page will delete your text if you haven\'t already saved it.'; 
    e.returnValue = message; 
    return message; 
} 
.... 
+2

Hinweis: Chrome verwendet den zurückgegebenen Text nicht mehr. Es wird eine allgemeine Meldung angezeigt, dass Änderungen möglicherweise nicht gespeichert werden. – loganfsmyth

+0

Diese vor dem Entladen funktionieren in allen Browsern wie Safari, Chrome, Firefox, Opera und so weiter –

Verwandte Themen