2009-03-14 4 views
0

Wir haben diese Flex-App mit dem Server sprechen. Wir brauchen eine Art von FlexEvent.ON_BROWSER_WINDOW_CLOSE Event, aber leider bietet Flex solche nicht.Wie abonniere ich ein JavaScript Event Formular? Flex 3 Action Script Code?

Also habe ich den Rat, ein Javascript "onbeforeunload" -Ereignis zu fangen und den Flash-Client durch die ExternalInterface-registrierte Methode aufzurufen.

Gibt es eine Möglichkeit, ein JavaScript-Ereignis ohne JavaScript-Code zu abonnieren?

Update Ich möchte das tun ist Multi-Flash-App-Hosting-Seiten. Sicherlich konnten wir das durch externe Javascript-Datei, aber es ist immer noch unklar ...

Antwort

2

Sie können die js Code kompilieren injizieren in die SWF-Datei:

package 
{ 

import flash.display.Sprite; 
import flash.external.ExternalInterface; 
import flash.net.SharedObject; 


public class CloseTest extends Sprite 
{ 
    private var so:SharedObject = SharedObject.getLocal("hello"); 

    public function CloseTest() 
    { 
     if (ExternalInterface.available) 
     { 
      ExternalInterface.addCallback("onclose", onClose); 
      ExternalInterface.call(this.javascript); 
     } 

     this.so.data.count ||= 0; 

     trace(so.data.count); 
    } 

    private function onClose():void 
    { 
     this.so.data.count++; 
     this.so.flush(); 
     this.so.close(); 
    } 

    private var javascript:XML = <javascript><![CDATA[function() 
    { 
     window.onbeforeunload = function() 
     { 
      alert("hello"); 
      document.getElementById("CloseTest").onclose(); 
     } 

    }]]></javascript>; 
} 

} 
2

Sie können ExternalInterface verwenden, um Javascript-Funktionen aufzurufen, die im Container definiert sind. Siehe this.

This Post beschreibt eine ähnliche Situation wie Ihre. Schau mal.

+0

Dies ist völlig wir tun. Allerdings benötigt es Browser-Javascript in der Hosting-Seite sein. –

+0

Wenn JavaScript nicht aktiviert ist, erhalten Sie immer noch das gewünschte Ereignis? Und wenn es so ist, warum nicht auch eine oder zwei Zeilen einfügen? – dirkgently

0

Es tut uns leid, es gibt keine Möglichkeit zu tun, was Sie suchen, ohne Javascript und ExternalInterface zu verwenden.