J'ai une application Flex qui permet à l'utilisateur de modifier un document basé sur un nuage. (Pensez SlideRocket.) Lorsque l'utilisateur essaie de naviguer ou de fermer la fenêtre du navigateur, je voudrais leur montrer une boîte de dialogue «êtes-vous sûr» si elles ont des modifications non enregistrées. J'utilise la classe personnalisée suivante, que j'ai trouvée à Flash player notified on browser close or change page (as3). Je ne pense pas c'est le problème.Demander confirmation à l'utilisateur avant la fermeture du navigateur _iff_ une variable Flex est vraie
package
{
import flash.external.ExternalInterface;
public class ExternalInterfaceUtil
{
public static function addExternalEventListener(qualifiedEventName:String, callback:Function, callBackAlias:String):void
{
// 1. Expose the callback function via the callBackAlias
ExternalInterface.addCallback(callBackAlias, callback);
// 2. Build javascript to execute
var jsExecuteCallBack:String = "document.getElementsByName('"+ExternalInterface.objectID+"')[0]."+callBackAlias+"()";
var jsBindEvent:String = "function(){"+qualifiedEventName+"= function(){"+jsExecuteCallBack+"};}";
// 3. Execute the composed javascript to perform the binding of the external event to the specified callBack function
ExternalInterface.call(jsBindEvent);
}
}
}
Dans ma fonction applicationComplete, j'ajouter un écouteur d'événement au javascript événement window.onbeforeunload, comme suit:
ExternalInterfaceUtil.addExternalEventListener("window.onbeforeunload", requestUnloadConfirmation, "unloadConfirmation");
La fonction Actionscript requestUnloadConfirmation (ci-dessous) est appelé avec succès lorsque l'utilisateur tente de ferme la fenêtre du navigateur. Cependant, cela n'empêche pas le navigateur de se fermer. (Dans Chrome, le navigateur se ferme et la fonction Actionscript est appelée par la suite. Dans Firefox, le navigateur reste ouvert pendant toute la durée de la fonction, mais se ferme alors.)
private function requestUnloadConfirmation():String {
if (changedSinceSave)
return "There are unsaved changes. Are you sure you want to leave without saving?";
else
return null;
}
Le comportement est identique dans le débogage et la libération construit, et sur le serveur de production ainsi que sur la machine locale.
Toute aide serait grandement appréciée,
Dave
Ajout d'un retour à la fonction de gestion des événements a fait l'affaire. Merci mille fois pour avoir sauvé la journée! Pour ceux d'entre vous qui liront ceci dans le futur: Le changement proposé à requestUnloadConfirmation n'était pas nécessaire - et, en fait, conduit à deux boîtes de dialogue de confirmation qui sont montrées successivement plutôt que juste une. En effet, renvoyer une valeur de chaîne à window.onbeforeunload provoque l'affichage d'une boîte de dialogue de confirmation. Vous n'avez pas besoin de demander explicitement un autre. Testé comme fonctionnant dans Chrome, Firefox, Safari. Je suppose que cela fonctionne dans IE comme Microsoft a inventé window.onbeforeunload dans IE4. –
Oh, cool! Je ne savais pas à propos de la confirmation automatique lors du retour d'une chaîne dans windows.onbeforeunload. Je n'ai joué qu'une seule fois avec cet événement, pour le plaisir. Je vais modifier ma réponse. – Cameron
Désolé, ce code n'est pas complet et ne fonctionnera pas bien, j'ai posté les corrections ci-dessous – Uri