2009-07-13 9 views

Respuesta

15

ExternalInterfaceUtil.addExternalEventListener ("window.onunload", handleLogout, "unloadFlex");

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

No recuerdo de dónde saqué esto, pero lo he usado y funciona bastante bien. Por supuesto, no todos los navegadores van a cooperar, pero es mejor que nada ...

+0

Eso funciona fantásticamente bien. ¿Alguna idea de cómo escuchar al "usuario hizo clic en el botón OK en la ventana emergente JS" desde dentro de un programa flexible? –

1

Puede usar una combinación de Javascript y Flash para lograr lo que busca.

Utilice Javascript para detectar cuándo el usuario navega fuera de la página. Use el evento javascript para llamar a su película Flash usando ExternalInterface. Una vez que se invoca su código, puede manejar el evento según sea necesario.

+0

interfaz externa puedo manejar .. ¿Cómo se comprueba que en javascript? –

+0

Javascript tiene un evento window.onunload al que puede adjuntar una función. Desafortunadamente, algunos navegadores no siempre invocarán el evento onunload cuando el usuario cierre la ventana debido al abuso del mismo en el pasado. Sé que Opera no lo sabe, no estoy seguro de los demás. – Powerlord

1

Lo anterior funcionó muy bien para mí con una excepción: si devuelvo nulo como cadena, no quiero que aparezca ningún mensaje arriba. Funciona para todos los navegadores excepto IE, que abre un cuadro de diálogo que dice "nulo".

que pueden ser corregidos mediante la alteración de una línea para agregar un cheque nulo:

var jsBindEvent:String = "function(){"+qualifiedEventName+"= function(){if (" + jsExecuteCallBack + ") return "+jsExecuteCallBack+"};}"; 
Cuestiones relacionadas