Hoàng Web

Thiết Kế Website WordPress

  • Kho giao diện
  • Dịch Vụ
    • Thiết kế web giá rẻ
    • Thiết kế website WordPress
    • Hosting Miễn Phí 100GB
    • Tích hợp thanh toán MoMo, ViettelPay, Vietcombank, MB..
    • Tối ưu Google PageSpeed
    • Sửa lỗi nâng cấp website
    • Viết plugin WordPress
    • Code Tool theo yêu cầu
  • Bảng giá
  • Quy trình làm việc
  • Giới thiệu
  • Liên Lạc
Trang chủ » Programming » Flash » Gửi và nhận dữ liệu giữa 2 file flash SWF với LocalConnection

Gửi và nhận dữ liệu giữa 2 file flash SWF với LocalConnection

Chủ Nhật, 07/09/2014 by Hoàng Quách

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Flash cho phép gửi và nhận dữ liệu giữa 2 files swf riêng biệt, tại sao lại làm được như vậy? Chúng ta sẽ hiểu điều này như thế nào?

Các file swf chạy sẽ được quản lý chung bởi Flash player, chúng đều truy cập được đối tượng LocalConnection nhờ vào đó mà các files bắn thông tin tín hiệu được cho nhau. Trong bài viết này mình sử dụng 2 file swf, một file gửi dữ liệu và file còn lại nhận dữ liệu.
– SWF gửi dữ liệu đi có tên xác định và gọi hàm callback của swf khác để nhận dữ liệu. Dữ liệu gửi đi sử dụng phương thức send. Bạn có thể gửi nhiều dữ liệu vào đối tượng global LocalConnection, với mỗi một dữ liệu được gán với một tên riêng biệt có thể cùng callback hoặc khác chứa trong swf nhận. Ví dụ:

var localConnection:LocalConnection=new LocalConnection();
localConnection.send("connecter","showText",txt_mc.txt.text);

– SWF nhận dữ liệu, sẽ kết nối vào thông tin dữ liệu từ swf phát dữ liệu thông qua tên dữ liệu. Như ví dụ trên, thì tên dữ liệu gửi trên đối tượng LocalConnection là “connecter”.

Khai báo SWF client nhận dữ liệu với LocalConnection, để xác định và gọi callback từ tên dữ liệu được gửi bởi SWF truyền dữ liệu.

localConnection =  new LocalConnection();
localConnection.connect("connecter");
localConnection.client = this;

Bạn có thể kiểm tra dữ liệu gửi đi có hoạt động không, cho SWF gửi và nhận với sự kiện StatusEvent.STATUS. Thêm sự kiện StatusEvent cho instance của LocalConnection.

localConnection.addEventListener(StatusEvent.STATUS, onStatus);
private function onStatus(evt:StatusEvent):void
{
	switch (evt.level)
	{
		case "status" :
			trace("LocalConnection.send() succeeded");
			break;
		case "error" :
			trace("LocalConnection.send() failed");
			break;
	}
	
}

Ví dụ tiếp sau đây, mình gửi văn bản của TextField nhập thông qua người dùng và truyền trực tiếp vào TextField trên SWF khác. Bạn gõ thử chuỗi trong SWF dưới đây, sẽ thấy chuỗi đó xuất hiện trong SWF nhận.
SWF Send data
[kml_flashembed movie=”https://img.hoangweb.com/2014/09/Sender.swf” height=”450″ width=”500″ /]

SWF receive data:
[kml_flashembed movie=”https://img.hoangweb.com/2014/09/Receiver.swf” height=”450″ width=”500″ /]

SWF gửi và nhận không nhất thiết cùng chạy trên trình duyệt vì nó đều chạy qua flash player nên có thể chạy swf trên desktop bằng cách nhấn đúp vào file và file swf nhận dữ liệu như bình thường.
LocalConnection-flash-test

Tải demo source code LocalConnection-AS3

Kết nối tới SWF khác domain

Flash cho phép truyền dữ liệu với 2 SWF nằm trên các trang web khác nhau, khác domain thậm trí mở với 2 trình duyệt.
Để làm điều này bạn thiết lập domain cho phép dữ liệu nhận của đối tượng LocalConnection bởi phương thức allowDomain. Khai báo cho phép kết nối vào domain của SWF cho, xem ví dụ sau:

SWF nhận dữ liệu trên www.domain.com>

var conn:LocalConnection;
conn=new LocalConnection();
conn.allowDomain('www.otherdomain.com');
conn.connect('connectionName');

function methodName():void{
	trace("hello World !");
}

SWF phát dữ liệu từ www.otherdomain.com
SWF cho phép gửi thông tin dữ liệu tới một domain khác, điền tên domain trước tên đối tượng bằng dấu hai chấm “:”. Do vậy, chỉ domain này mới có thể nhận được dữ liệu.

var sendingLC:LocalConnection;
sendingLC=new LocalConnection();
sendingLC.send('www.domain.com:myConnection', 'myMethod');

Nếu muốn nhận dữ liệu từ nhiều domain mà swf đang truyền đi, thay vì chỉ định một domain vào hàm allowDomain, chúng ta sử dụng ký tự wildcard để có thể lấy nhiều dữ liệu từ nhiều domain của swf gửi đi chứa trong đối tượng global LocalConnection thuộc quản lý flash player. Ví dụ sau swf có thể nhận dữ liệu trong mọi domain của swf gửi tới nó.

//swf nhận: wwwp.domain.com
conn.allowDomain('*');
conn.connect("_connectionName");
conn.connect("_connectionName1");

//swf 1 gửi: www.otherdomain.com
conn.send("www.domain.com:_connectionName","myMethod");

//swf 2 gửi: www.otherdomain.com
conn.send("www.domain.com:_connectionName1","myMethod1");

Hoặc nếu swf gửi không chỉ định domain có nghĩa mọi swf có thể nhận được dữ liệu từ nó.

//swf gửi
conn.send("_connectionName","myMethod");

//swf nhận
conn1.allowDomain('*');
conn1.connect("_connectionName");

Trong ứng dụng AIR có khác một chút, nhưng mình sẽ đề cập trong bài viết sau.

Hãy cho mình biết suy nghĩ của bạn trong phần bình luận bên dưới bài viết này. Hãy theo dõi kênh chia sẻ kiến thức WordPress của Hoangweb trên Twitter và Facebook

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Chuyên mục: Flash Tìm kiếm: flash, swf

Tôi giúp gì cho bạn?

HOÀNG WEB

Địa chỉ: Tây Sơn, Phường Quang Trung, Quận Đống Đa, Hà Nội

Hotline: 0987 342 124 – 0868 292 303 (8h:00 – 21h:00)

Email: [email protected]

Website: www.hoangweb.com

KẾT NỐI VỚI TÔI

  • Facebook
  • GitHub
  • YouTube

SẢN PHẨM

  • Plugin Thanh Toán Quét Mã QR Code Tự Động
  • WP2Speed – Tối ưu Google Speed
  • 23WebHost – Hosting Miễn Phí 100GB

LIÊN KẾT

  • Có nên thuê thiết kế website giá rẻ?
  • Hướng dẫn thanh toán
  • Chính sách hoàn tiền
  • Trung tâm hỗ trợ

Copyright © 2023 | All rights reserved | HOANG WEB
Mọi hình thức sao chép nội dung trên website này mà chưa được sự đồng ý đều là trái phép.