code: func (w *Window) OnMessage(l ListenerMessage) {
  	w.onMessageOnce.Do(func() {
  		w.On(eventNameWindowEventMessage, func(i Event) (deleteListener bool) {
  			v := l(i.Message)
  			if len(i.CallbackID) > 0 {
  				o := Event{CallbackID: i.CallbackID, Name: eventNameWindowCmdMessageCallback, TargetID: w.id}
  				if v != nil {
  					o.Message = newEventMessage(v)
  				}
  				if err := w.w.write(o); err != nil {
  					astilog.Error(errors.Wrap(err, "writing callback message failed"))
  				}
  			}
  			return
  		})
  	})
  }
docs: // OnMessage adds a specific listener executed when receiving a message from the JS
  // This method can be called only once