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

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

回答

收藏

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

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

本文涵盖与 apps communication 事件相关的主题。
6 h8 I! n! \, ^% I0 \6 k. w0 e) c% Z6 G$ U1 h  H
; }( f/ f( }: a$ I
定义事件处理程序

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

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

  1. import { defineEventHandlers } from '@telegram-apps/bridge';
    % D/ s  q7 F$ ~7 s
  2. 2 I! j. q2 d/ f/ F
  3. defineEventHandlers();
复制代码

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

. z1 g" |" u( ?
on 和 off

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

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

  1. import { on } from '@telegram-apps/bridge';
    8 H( w8 X' b2 k4 L9 H
  2. 2 ?- u8 y6 M+ p3 H% B0 p
  3. // Start listening to the "viewport_changed" event. The returned value
    1 Y/ s5 _3 O; i
  4. // is a function that removes this event listener.% @1 `, s, [! Q' \# V' }$ }1 l
  5. const removeListener = on('viewport_changed', (payload) => {
    2 W* n/ L0 D- w3 m6 V+ @
  6.   console.log('Viewport changed:', payload);
    4 L3 L. @) M0 i% \/ O7 O8 S
  7. });* I/ Z( F4 k6 A8 B) R4 k6 S

  8. / F- A6 p7 m+ P0 Y/ }
  9. // Remove this event listener.
      ~$ C5 f7 h8 ^$ ~( y$ t: |; S7 Y
  10. removeListener();
复制代码
% X  Q  j; B4 G' |; o3 g

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

  1. import { on, off, type EventListener } from '@telegram-apps/bridge';
    1 s/ O) }- c& A. }
  2. 3 k# s& h6 z8 ]6 E8 G# j
  3. const listener: EventListener<'viewport_changed'> = (payload) => {
    1 x( q4 H  l1 X
  4.   console.log('Viewport changed:', payload);
    ( A( ^7 U) ^6 y9 t6 K) G* e
  5. };
    ( o  j8 u! {! {' ~9 _5 [# ^

  6. ' I7 [5 c6 }/ d1 _9 S; k4 }9 O4 s
  7. // Start listening to the event.3 t, A) O2 {0 E5 m; V  t9 N8 `
  8. on('viewport_changed', listener);
    3 l3 f; x! Y) w7 Z5 y# }

  9. * F" r+ w( n  H# f( M1 Z
  10. // Remove the event listener.: m6 g" S  N) k* V# C7 s
  11. off('viewport_changed', listener);
复制代码
1 I1 `2 f4 n# ~( ?& S' ?) J

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

  1. import { on } from '@telegram-apps/bridge';
    % d. a- D0 ^  R3 N
  2. . ^* ?2 W6 N( v5 V) i6 y: I
  3. // Will automatically be removed after the first listener execution./ N$ ?% q* y7 y9 T6 T6 ]/ k5 k
  4. on('viewport_changed', (payload) => {3 P2 f. h, H6 t
  5.   console.log('Viewport changed:', payload);
    1 C  O- \  V+ j5 b* P
  6. }, true);
复制代码
subscribeunsubscribe% Y5 n/ u: @+ o8 {: @! E. x0 Y

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

import {
+ d* e2 ~  z1 h9 x+ \9 X  subscribe,
3 z2 {4 n2 b- ]; p  unsubscribe,
3 ^/ h+ J' P0 W$ ~- H) J  type SubscribeListener,
) e2 S4 b) G1 x0 }7 ?} from '@telegram-apps/bridge';: v/ S& q+ I0 G1 z& F0 J: f! F. y/ h

! O, F$ \9 d# m1 i$ @% b! Jconst listener: SubscribeListener = (event) => {- z' q, r6 ]0 J
  console.log('Received event', event);& P: v+ I6 z6 ?) h/ m
};2 j/ H8 I! g2 a" r: C4 m

+ L8 H% C3 K2 N6 p* V  h" |& }// Listen to all events.4 n2 G, o( u8 w3 i
subscribe(listener);+ X9 _9 u; t3 k. D5 G
, _3 H* y2 D4 d* k$ n. p& ?' Z
// Remove the listener.
; F' D: O: D( R) S4 k' y" vunsubscribe(listener);
; A8 r* Y& ]. Z8 ~. y  T

. F; X( O) D7 Q. q1 o9 l5 b6 Z
0 H& B4 U# z* c$ Z3 j( @4 }$ J
" U* a7 s2 a9 n1 M+ F! z
& @* l& t. ?3 _' a4 Z

+ N5 t. R7 K- N, X# t" ^: A1 k" G; ]. z9 L2 k

  c8 e) k( r1 j4 t- L0 X
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则