2009-07-13 23 views

Trả lời

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

Tôi không nhớ mình đã lấy từ đâu, nhưng tôi đã sử dụng và nó hoạt động khá tốt. Tất nhiên không phải tất cả các trình duyệt đều hợp tác, nhưng nó tốt hơn là không có gì ...

+0

Điều đó hoạt động rất tốt. Bất kỳ ý tưởng về cách nghe "người dùng nhấp vào nút OK trong cửa sổ bật lên JS" từ bên trong một chương trình flex? –

1

Bạn có thể sử dụng kết hợp Javascript và Flash để đạt được những gì bạn đang tìm kiếm.

Sử dụng Javascript để phát hiện khi người dùng điều hướng khỏi trang. Sử dụng sự kiện javascript để gọi vào phim Flash của bạn bằng cách sử dụng ExternalInterface. Khi mã của bạn được gọi, bạn có thể xử lý sự kiện khi cần.

+0

giao diện bên ngoài tôi có thể xử lý .. làm thế nào để bạn kiểm tra xem nó trong javascript? –

+0

Javascript có sự kiện window.onunload mà bạn có thể đính kèm một hàm vào. Thật không may, một số trình duyệt sẽ không phải lúc nào cũng gọi sự kiện onunload khi người dùng đóng cửa sổ do lạm dụng nó trong quá khứ. Tôi biết thực tế Opera không, tôi không chắc về những người khác. – Powerlord

1

Ở trên làm việc tuyệt vời cho tôi với một ngoại lệ: nếu tôi trả về null là chuỗi của tôi, tôi không muốn bất kỳ thư nào để bật lên. Nó hoạt động cho tất cả các trình duyệt ngoại trừ IE, sẽ trả về một hộp thoại có nội dung "null".

Điều đó có thể được sửa chữa bằng cách thay đổi một dòng để thêm một kiểm tra null:

var jsBindEvent:String = "function(){"+qualifiedEventName+"= function(){if (" + jsExecuteCallBack + ") return "+jsExecuteCallBack+"};}"; 
Các vấn đề liên quan