Frage

Gibt es trotzdem, um zu verhindern, onbeforeunload aufgerufen wird, wenn auf Mailto-Link in Chrom klicken. In FF, Safari, IE funktioniert es gut.

<html>
<head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js">
        google.load("jquery", "1.3.2");
    </script>

    <script type="text/javascript">
        $(document).ready(function(){
            window.onbeforeunload = confirmExit;
        });

        function confirmExit() {
            return "Are you sure?";
        }
    </script>
</head>
<body>
    <a href="mailto:someone@somewhere.com?subject=test mail&body=Hello%20World">Mail Link</a>
</body>
</html>
War es hilfreich?

Lösung

Was ist das Problem zu umgehen?

$(document).ready(function(){
    mailtoClicked = false;
    window.onbeforeunload = confirmExit;
    //Test if browser is Chrome
    if (/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())) {
        $('a[href^=mailto]').click(function() {mailtoClicked = true;});
    }
});

function confirmExit() {
    if (!mailtoClicked) {
        return "Are you sure?";
    } else {
        mailtoClicked = false;
    }
}

Demo .

Andere Tipps

Hier ist ein Lösungsvorschlag, die vernünftig aussieht

http: //www.ilovebonnie.net/2009/09/23/how-to-use-onbeforeunload-with-form-submit-buttons/


UPDATE (Link ist tot) - Kopiert Inhalte von Google-Cache

Wie die Verwendung mit Formular Onbeforeunload Buttons Senden

23. September 2009 - Geekery

Während dabei einige Programmierung ich auf ein interessantes Dilemma kam. Während ich es böse machen es schwer für einen Benutzer zu verlassen, um eine Seite zu verstehen, ich bin nicht hier, um die Sache zu argumentieren (oder deren Fehlen) von onbeforeunload.

Auf einer bestimmten Form, wir zwingen den Browser nicht über die Informationen zwischenzuspeichern Potential AJAX / JavaScript Probleme zu vermeiden, wenn sie die Form verlassen sollte und kommen zurück, als Browser alle nicht die gleiche handeln (zB IE Blätter Kontrollkästchen aktiviert, aber erinnert sich nicht an Änderungen, die aufgrund JavaScript auf die Seite aufgetreten sind). Als solche warnen wir unsere Benutzer, wenn sie über, um die Bestellformular zu lassen, damit sie wissen, dass sie es wieder füllen müssen.

Die Funktion war einfach:

window.onbeforeunload = function () {
    return "You are about to leave this order form. You will lose any information...";
}

Leider würde dies auch ausgelöst werden, wenn der Benutzer das Formular vorgelegt, die, ist offensichtlich nicht das, was wir wollen. Nach der Suche im Internet um stieß ich auf eine einfache Lösung, dass ich dachte, ich würde teilen:

// Create a variable that can be set upon form submission
var submitFormOkay = false;
window.onbeforeunload = function () {
    if (!submitFormOkay) {
        return "You are about to leave this order form. You will lose any information...";
    }
}

Da Onclick erscheint vor onsubmit zu registrieren, wenn ein Absenden-Button klicken, können wir eine wenig Variablendeklaration in unserem Submit-Button, so dass submitFormOkay auf true gesetzt werden hinzufügen, bevor das Formular Vorlage geschieht:

<input type="submit" id="submit_button" onclick="submitFormOkay = true;">
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top