English 简体中文 繁體中文 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french

简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE คนไทย Français русский

回答

收藏

Telegram 小程序 | TypeScript @telegram-apps/bridge | 事件

开源社区 开源社区 3197 人阅读 | 0 人回复 | 2025-02-22

本文涵盖与 apps communication 事件相关的主题。
; P. g0 a, g1 d. V( M6 x; r; j6 v9 Y$ s% g, I$ I. J- A. p
0 h* O. f6 {9 Y5 |2 f
定义事件处理程序

为避免副作用,该软件包在导入时不会调用任何函数。 Telegram 迷你应用程序 需要在本地 Telegram 应用程序和迷你应用程序之间使用特定的通信方式,其中涉及在全局 window 对象中定义某些方法。

要启用此功能并开始接收 Telegram 迷你应用程序事件,请使用 defineEventHandlers 函数:

  1. import { defineEventHandlers } from '@telegram-apps/bridge';; _; l- |2 j: @: L4 R
  2. 7 n) z8 X& ^" O# Y, ~
  3. defineEventHandlers();
复制代码

这种设置通过监听 和处理必要的事件,确保迷你应用能与原生 Telegram 应用正确交互。


( P1 |+ g1 E( p+ `' bon 和 off

要开始处理事件,需要使用 on 和 off 函数。

下面是 on 函数的一个基本示例:

  1. import { on } from '@telegram-apps/bridge';7 C! S& D, F/ h$ J& a
  2. ; g3 M) i: m8 p2 k. N( S3 U" T
  3. // Start listening to the "viewport_changed" event. The returned value. h+ ~  O5 C2 B$ A5 X
  4. // is a function that removes this event listener.$ ^( q# e8 v; P" `
  5. const removeListener = on('viewport_changed', (payload) => {7 c+ e* D- G, N. R  P- y
  6.   console.log('Viewport changed:', payload);
    ' U6 F! a9 f* `: j! Q4 b0 I
  7. });4 d& w4 B( v; r9 Y4 f& M
  8. 9 l5 H/ c5 z+ C0 m. g5 D
  9. // Remove this event listener.
    ! B0 b+ i( c& X! k
  10. removeListener();
复制代码
6 O& I$ _$ ~/ w, O9 y9 j) C1 @- M

另外,要停止监听事件,开发人员可以使用 off 功能:

  1. import { on, off, type EventListener } from '@telegram-apps/bridge';$ K1 R% I' _- o( [7 z- J: w0 {4 b4 G

  2. 2 m6 G/ j- A: a, n4 w3 k$ k3 `
  3. const listener: EventListener<'viewport_changed'> = (payload) => {* v3 Z. i( }# J) e- ~$ ?
  4.   console.log('Viewport changed:', payload);4 a3 J4 K. [/ R- q1 G/ R' o
  5. };9 ?' c* L$ u( ^; h# \

  6. 9 h  l; z1 H) z7 A8 Z( L
  7. // Start listening to the event.3 }, |( d6 p( n  i6 p
  8. on('viewport_changed', listener);
    1 N; l0 f7 p' ^; m7 {7 T8 |  I
  9. # s/ l, Q5 {! I( i  l! a
  10. // Remove the event listener.
    : R. ^3 W4 t& N2 j
  11. off('viewport_changed', listener);
复制代码

1 V' y9 A$ f/ N: a( ^% v# R+ I* B. k

要只调用监听器一次,则使用第三个布尔参数:

  1. import { on } from '@telegram-apps/bridge';6 ~4 ]/ `% \& a

  2. 7 w) ~6 E* a5 m( ?
  3. // Will automatically be removed after the first listener execution.; U, m  ^4 Z& e$ Z4 ~" R
  4. on('viewport_changed', (payload) => {
    * ^+ b7 i' }' ^5 {* F
  5.   console.log('Viewport changed:', payload);- D  q: s9 ~3 c5 Y
  6. }, true);
复制代码
subscribeunsubscribe
2 c1 Q+ g8 Z1 S9 ~

要监听本地 Telegram 应用程序发送的所有事件,需要使用 subscribe 和 unsubscribe 功能:

import {/ d# _& R  W0 E4 s2 P4 r
  subscribe,# a- |4 D- o% I( d' b3 y
  unsubscribe,
5 E3 ^  b8 b: d. e* n9 _! @  type SubscribeListener,5 q5 L/ a; y, [9 R+ ?; j% v! U
} from '@telegram-apps/bridge';
: s6 A' z- {4 ~% c" K
% F/ O3 a) k3 R' B' q# f+ ^$ A2 [const listener: SubscribeListener = (event) => {+ Z+ b7 A! m' M$ f9 U  a
  console.log('Received event', event);/ w% p% _2 k1 @
};
2 ~  v: u( D: s7 {2 [  H% E0 a
( a  Z5 C5 L8 X7 ]/ l# b// Listen to all events.2 o; o, ~( G" o- _; p6 t
subscribe(listener);9 ]! ^4 L+ N& u9 B4 E. W
$ k' N6 L" g" B. P$ v7 g
// Remove the listener.
) @5 D4 I6 R" X3 A1 Punsubscribe(listener);
5 G' M- F0 a# f, n
1 |# @5 k" Y1 y1 f# q, d/ |; x! d
* M. R/ K* E1 H7 X0 Q
6 p) I( L" X& ^+ B+ _( G

9 V, U) p6 ?  E( j
3 H7 A  G5 u# ~- J& @8 r5 ?' ^4 K8 A3 z9 ]% ~" ?: l' R: O

' L3 o+ S" n! F" Z
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则