2010-01-12 24 views
9

Có cách nào để lấy danh sách các hàm được hiển thị từ một đối tượng Flash không? Ví dụ, bạn có thể nhận được một danh sách của tất cả các phương pháp trong một đối tượng bằng cách thực hiện:Nhận định nghĩa ExternalInterface trong Javascript

for (var i in object) { 
    if (typeof object[i] == "function") { 
    console.log(i); 
    } 
} 

Vấn đề duy nhất là điều này sẽ không tiếp xúc với bất kỳ phương pháp đăng ký thông qua các ExternalInterfaces API. Tôi có thể thử xem chức năng có tồn tại không (object['method']) và nó cho tôi biết nó là một hàm, nhưng tôi sẽ phải đoán mọi phương pháp hiện có theo cách này.

LƯU Ý: Rõ ràng, tôi không có quyền truy cập vào ActionScript.

Trả lời

-1

Bản năng của tôi không có, ExternalInterface về cơ bản là một hộp đen, hoặc hộp thư màu đen, bạn poke mọi thứ và đôi khi mọi thứ trở lại, nhưng bạn không thể mở cửa để xem những gì bên trong.

Nếu không có tài liệu về những gì được hiển thị trong SWF, đề xuất duy nhất khác là giải mã swf để xem nguồn.

1

Vấn đề còn tồi tệ hơn: thông tin không có sẵn trong ActionScript. Bạn đăng ký một chức năng mới là ExternalInterface.addCallback('foo', foo) và bạn không thể liệt kê các cuộc gọi lại đã đăng ký.

1

Chỉ cần đoán xem có hoạt động không. Tất cả các hàm ExternalInterface phải được định nghĩa trong không gian tên chung. Thử nhúng SWF vào trang HTML và nhận tất cả các hàm Javascript được xác định cho trang sau khi trang đã tải. List of global user defined functions in JavaScript?

Danh sách hàm phải là các hàm được xác định trong tệp SWF.

2

Chỉ cần nhấn câu hỏi này, một chút đến cuối có vẻ như, nhưng tôi sẽ đăng một câu trả lời dù sao;) Sử dụng IE10 (windows 7) nó làm việc hoàn toàn tốt đẹp cho tôi để liệt kê tất cả các phương pháp của tôi như vậy:

var obj = document.getElementById('flashObj'); 
for(var prop in obj){ 
    var fx = obj[prop]; 
    if(obj.hasOwnProperty(prop) && (typeof fx == 'function') && /eval\(instance/.test(fx)){ 
    console.log(prop) 
    } 
} 

Lưu ý rằng thao tác này không hoạt động trong Chrome hoặc Firefox và chỉ với regexp chính xác vì IE10 không báo cáo "mã gốc" như các trình duyệt khác.

Các vấn đề liên quan