2008-11-23 28 views
6

Trên mức trừu tượng hơn thì a previous question, theo kinh nghiệm của tôi có 3 cách gọi hàm javascript trên trang html từ tệp nhúng .swf sử dụng AS3: ExternalInterface, fscommand và navigationToURL.Actionscript3 để truyền thông JavaScript: thực hành tốt nhất

Hãy so sánh và đối chiếu các phương pháp này (và có thể những người khác mà tôi chưa liệt kê) và nói về ưu và khuyết điểm của từng hiện tại, ExternalInterface dường như là như cách để đi về tính linh hoạt, nhưng phù hợp với mọi tình huống? Có lợi ích cụ thể nào về tốc độ thực thi hay bất cứ thứ gì như thế không? Tôi tò mò - chúng ta nghĩ gì?

Trả lời

6

ExternalInferface được tạo ra để làm cho giao tiếp giữa JS và Flash dễ dàng hơn, do đó, nó không thực sự có ý nghĩa để sử dụng bất cứ điều gì khác. Thực hành phổ biến là kiểm tra xem nó có sẵn đầu tiên hay không bằng cách đánh giá giá trị của thuộc tính ExternalInterface.available trước khi thực hiện cuộc gọi đến một số JS. Thuộc tính này cho bạn biết nếu SWF mà bạn muốn gọi một số JS từ bên trong một vùng chứa cung cấp một giao diện bên ngoài. Trong các từ khác, nếu sử dụng ExternalInterface sẽ hoạt động. Nếu nó không có sẵn thì chỉ cần sử dụng flash.net.sendToUrl. Không bao giờ sử dụng fscommand() vì nó sử dụng VBScript và có thể gây xung đột với VBScript khác trên một trang. Ngoài ra, bạn chỉ có thể gửi một chuỗi đối số với fscommand và phải chia nó thành phía JS.

+0

okay - Tôi thích nó, đó là những gì nó đã được thực hiện cho, điều VBScript, điều đối số duy nhất, và navigationToURL như là một thay thế - vì vậy, khi bạn kiểm tra sự sẵn có của ExternalInterface, bạn đang kiểm tra trên bên flash, hoặc là nó bằng cách nào đó kiểm tra để xem nếu javascript là có? –

+0

Cập nhật câu trả lời của tôi một chút. –

+0

đẹp, có ý nghĩa. –

5

Tất cả phụ thuộc vào nếu bạn muốn giao tiếp đồng bộ hoặc không phải là ExternaInterface có thể trả về dữ liệu ở vị trí navigatoToURLfscommand không đồng bộ và chỉ có thể gọi hàm javascript; họ không thể trả về giá trị hoặc phản hồi.

Từ docs sống liên quan đến giao diện bên ngoài:

Từ ActionScript, bạn có thể làm như sau trên trang HTML:

  • Gọi bất kỳ chức năng Javascript.
  • Vượt qua bất kỳ số lượng đối số nào, với bất kỳ tên nào.
  • Vượt qua các loại dữ liệu khác nhau (Boolean, Number, String, v.v.).
  • Nhận giá trị trả lại từ hàm JavaScript.

Từ JavaScript trên trang HTML, bạn có thể:

  • Gọi một hàm ActionScript.
  • Vượt qua đối số bằng cách sử dụng ký pháp gọi hàm chuẩn.
  • Trả lại giá trị cho hàm JavaScript.

Lớp flash.external.ExternalInterface là một thay thế trực tiếp cho các lớp flash.system.fscommand.

Vì vậy, sử dụng ExternalInterface là phương thức ưa thích hoặc liên lạc giữa flash và chức năng Javascript, mặc dù nếu cuộc gọi chỉ đơn thuần là Không đồng bộ, bạn có thể sử dụng flash.net.navigateToURL.

+0

điểm không đồng bộ là điểm tốt nhất. –

2

ExternalInterface

  • Bạn có thể lấy giá trị trả về từ JS-AS và AS-JS gọi
  • Mã hóa tranh luận của bạn (gọi với mảng, đối tượng, vv Không cần phải mã hóa chúng)
  • trình duyệt chéo
  • khiếm khuyết khi bạn gửi HTML hoặc JSON (mã hóa đặc biệt), nó breaks internally

getURL

  • Bạn chỉ có thể gọi JS, bạn không nhận được giá trị trả về và bạn cần để mã hóa dữ liệu của bạn
  • Đã đẹp hơn phản đối và trong Flash 10 nó loại bỏ
  • Nó được thực sự loại bỏ , do đó, không sử dụng nó;)

fscommand

  • Thôi nào, ExternalInterface là giải pháp (cho năm 2008).
+0

cũng được đặt - việc ngừng sử dụng và xóa tiếp theo trong flash 10 cinches nó cho tôi. –

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