package jsoo_broadcastchannel

  1. Overview
  2. Docs
A wrapper in Js_of_ocaml to deal with BroadcastChannel

Install

Dune Dependency

Authors

Maintainers

Sources

2.0.0.tar.gz
md5=e24e6b6aafc3a15a0df5cd0c4bdafb4c

Description

The BroadcastChannel interface represents a named channel that any browsing context of a given origin can subscribe to. It allows communication between different documents (in different windows, tabs, frames or iframes) of the same origin. Messages are broadcasted via a message event fired at all BroadcastChannel objects listening to the channel.

Published: 13 Feb 2020

README

Jsoo_broadcastchannel

Checkout the documentation

Jsoo_broadcastchannel is a binding for the BroadcastChannel Api.

Example of use

Creating a channel an post message (on a first file) :

let channel = Broadcast_channel.create "my_first_channel"
let _ = Broadcast_channel.post channel (Js.string "Hello World")

Receiving message from the channel my_first_channel on another file with onmessage

(* Retreive the channel *)
let channel : Js.string Js.t Broadcast_channel.t = 
  Broadcast_channel.create "my_first_channel"
(* You have to fix the type of the channel, you can also use [Broadcast_channel.create_with] *)

let _ = 
  Broadcast_channel.on
    channel 
    (fun ev -> 
      (* Use the ev object *)
      Js._true
    )

Receiving message from the channel my_first_channel on an another file with addEventListener

(* Retreive the channel *)
let channel : Js.string Js.t Broadcast_channel.t = 
    Broadcast_channel.create "my_first_channel"
(* You have to fix the type of the channel, you can also use [Broadcast_channel.create_with] *)

let _ = 
  Broadcast_channel.addEventListener
    channel
    (Broadcast_channel.message channel)
    (Dom.handler (fun ev -> ... Js._true))
    Js._true

Or you can use Broadcast_channel.create_with (for a more convenient usage, without type annotation)

(* Retreive the channel *)
let (channel, message_event) = 
  Broadcast_channel.create_with 
    "my_first_channel"
    (Js.string "a sample")

let _ = 
  Broadcast_channel.addEventListener
    channel
    message_event
    (Dom.handler (fun ev -> ... Js._true))
    Js._true

Receiving message from the channel my_first_channel on an another file with Lwt_js_events

(* Retreive the channel *)
let channel : Js.string Js.t Broadcast_channel.t = 
  Broadcast_channel.create "my_first_channel"

let _ = 
  Lwt_js_events.async_loop 
    Broadcast_channel.lwt_js_message
    channel
    (fun ev _ -> 
      ... 
      Lwt.return_unit
    )

Special thanks

I would like to sincerely thank @drup for his advice on the implementation and the design of the API !

Sample

Dependencies (5)

  1. dune >= "1.11"
  2. lwt
  3. js_of_ocaml-ppx
  4. js_of_ocaml >= "2.8.4"
  5. ocaml >= "4.02.0"

Dev Dependencies

None

Used by

None

Conflicts

None