HTML5 - Tin nhắn web
Nhắn tin web là khả năng gửi tin nhắn thời gian thực từ máy chủ đến trình duyệt máy khách. Nó ghi đè vấn đề giao tiếp miền chéo trong các miền, giao thức hoặc cổng khác nhau
Ví dụ: bạn muốn gửi dữ liệu từ trang của mình đến vùng chứa quảng cáo được đặt tại iframe hoặc ngược lại bằng giọng nói, trong trường hợp này, Trình duyệt đưa ra một ngoại lệ bảo mật. Với tin nhắn web, chúng ta có thể chuyển dữ liệu dưới dạng một sự kiện tin nhắn.
Sự kiện tin nhắn
Sự kiện tin nhắn kích hoạt Nhắn tin chéo tài liệu, tin nhắn kênh, sự kiện do máy chủ gửi và web sockets. Nó đã được mô tả bằng giao diện Sự kiện tin nhắn.
Thuộc tính
Sr.No. | Thuộc tính & Mô tả |
---|---|
1 | data Chứa dữ liệu chuỗi |
2 | origin Chứa tên miền và cổng |
3 | lastEventId Chứa số nhận dạng duy nhất cho sự kiện tin nhắn hiện tại. |
4 | source Chứa một tham chiếu đến cửa sổ của tài liệu gốc |
5 | ports Chứa dữ liệu được gửi bởi bất kỳ cổng tin nhắn nào |
Gửi tin nhắn liên tài liệu
Trước khi gửi tin nhắn tài liệu chéo, chúng ta cần tạo bối cảnh duyệt web mới bằng cách tạo iframe mới hoặc cửa sổ mới. Chúng ta có thể gửi dữ liệu bằng cách sử dụng postMessage () và nó có hai đối số. Họ là -
- message - Tin nhắn cần gửi
- targetOrigin - Tên xuất xứ
Ví dụ
Gửi tin nhắn từ iframe tới nút
var iframe = document.querySelector('iframe');
var button = document.querySelector('button');
var clickHandler = function() {
iframe.contentWindow.postMessage('The message to send.',
'https://www.tutorialspoint.com);
}
button.addEventListener('click',clickHandler,false);
Nhận thông báo tài liệu chéo trong tài liệu nhận
var messageEventHandler = function(event){
// check that the origin is one we want.
if(event.origin == 'https://www.tutorialspoint.com') {
alert(event.data);
}
}
window.addEventListener('message', messageEventHandler,false);
Nhắn tin kênh
Giao tiếp hai chiều giữa các bối cảnh duyệt được gọi là tin nhắn kênh. Nó hữu ích cho việc giao tiếp giữa nhiều nguồn gốc.
Đối tượng MessageChannel và MessagePort
Trong khi tạo messageChannel, nội bộ nó tạo ra hai cổng để gửi dữ liệu và chuyển tiếp đến một ngữ cảnh duyệt khác.
postMessage() - Đăng tin ném kênh
start() - Nó gửi dữ liệu
close() - Nó đóng các cổng
Trong trường hợp này, chúng tôi đang gửi dữ liệu từ iframe này sang iframe khác. Ở đây chúng tôi đang gọi dữ liệu trong hàm và chuyển dữ liệu đến DOM.
var loadHandler = function() {
var mc, portMessageHandler;
mc = new MessageChannel();
window.parent.postMessage('documentAHasLoaded','http://foo.example',[mc.port2]);
portMessageHandler = function(portMsgEvent) {
alert( portMsgEvent.data );
}
mc.port1.addEventListener('message', portMessageHandler, false);
mc.port1.start();
}
window.addEventListener('DOMContentLoaded', loadHandler, false);
Đoạn mã trên, nó đang lấy dữ liệu từ cổng 2, bây giờ nó sẽ chuyển dữ liệu sang iframe thứ hai
var loadHandler = function() {
var iframes, messageHandler;
iframes = window.frames;
messageHandler = function(messageEvent) {
if( messageEvent.ports.length > 0 ) {
// transfer the port to iframe[1]
iframes[1].postMessage('portopen','http://foo.example',messageEvent.ports);
}
}
window.addEventListener('message',messageHandler,false);
}
window.addEventListener('DOMContentLoaded',loadHandler,false);
Bây giờ tài liệu thứ hai xử lý dữ liệu bằng cách sử dụng hàm portMsgHandler.
var loadHandler() {
// Define our message handler function
var messageHandler = function(messageEvent) {
// Our form submission handler
var formHandler = function() {
var msg = 'add <[email protected]> to game circle.';
messageEvent.ports[0].postMessage(msg);
}
document.forms[0].addEventListener('submit',formHandler,false);
}
window.addEventListener('message',messageHandler,false);
}
window.addEventListener('DOMContentLoaded',loadHandler,false);