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

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

回答

收藏

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

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

本文涵盖与 apps communication 事件相关的主题。
- C0 `& @" |4 M% S" n; [2 I3 ?( h- _) b: J7 b: r6 X
! p) T+ O5 `4 l, P+ L% I, h9 _
定义事件处理程序

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

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

  1. import { defineEventHandlers } from '@telegram-apps/bridge';
    2 X. {  a2 G" w- V1 Y' _% c0 |

  2. . h9 f. B' G9 t  E2 L+ Q
  3. defineEventHandlers();
复制代码

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

/ }7 ~' p7 D! |( W4 V5 N( K1 y
on 和 off

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

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

  1. import { on } from '@telegram-apps/bridge';% c- s2 F9 ]  c, h9 F

  2. " t/ Z3 d& w$ F) ^* A) C# H
  3. // Start listening to the "viewport_changed" event. The returned value) U0 d3 @, b7 H5 }
  4. // is a function that removes this event listener.. }: z& j' A: d! }  b9 }/ {; F
  5. const removeListener = on('viewport_changed', (payload) => {
    ! ^6 ~7 R9 W6 ]) Z% M7 f2 }) Z0 {
  6.   console.log('Viewport changed:', payload);* ]8 g5 o/ m4 ]! D. G! M6 E5 T4 i
  7. });
    ) ^+ Z0 y) m% i
  8. + \, V! `* p; a: u1 ]# q
  9. // Remove this event listener.
      U/ ]4 ?% }  |4 ~# Q
  10. removeListener();
复制代码

7 Q8 {( _9 h3 r: n

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

  1. import { on, off, type EventListener } from '@telegram-apps/bridge';/ o8 Q# r4 @/ {( |0 M+ ?& n

  2. : g5 y" X; [/ A- p1 e2 B$ }1 z% R
  3. const listener: EventListener<'viewport_changed'> = (payload) => {1 L, r- O* i0 c$ O0 b
  4.   console.log('Viewport changed:', payload);) A; p- Y" X& W, s$ Z
  5. };
    ! _4 v6 f5 ]# R4 j9 K; W
  6. 5 K. f% s( v2 D
  7. // Start listening to the event." o# N8 d7 v8 ^( c( P: A4 `
  8. on('viewport_changed', listener);# U# {# S3 v1 s5 I
  9. ' |  E- V& J& G6 f& @8 B. n
  10. // Remove the event listener.7 @0 y0 i5 k6 S' S( l
  11. off('viewport_changed', listener);
复制代码
4 B3 {: b3 D& P% l- J# G

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

  1. import { on } from '@telegram-apps/bridge';
    0 Q: Q6 O  d* j1 g9 G
  2. 5 I* @7 ]4 _* W: V: f: }
  3. // Will automatically be removed after the first listener execution.* q, c" R/ _8 s3 M- k
  4. on('viewport_changed', (payload) => {+ ?7 |3 |' F6 l2 K4 p5 a' B8 A
  5.   console.log('Viewport changed:', payload);
    ) o" I1 h7 ^. T
  6. }, true);
复制代码
subscribeunsubscribe  a5 {4 s" p: t& S6 A

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

import {( d# O8 \! C- C' W9 b1 X
  subscribe,
5 m* {& _+ G  f8 n% f  unsubscribe,
9 B- r: n4 u, M7 c2 A0 X8 i  type SubscribeListener,1 h2 O* B0 i. [4 i
} from '@telegram-apps/bridge';4 p  r6 B, s8 ~( c% P, o7 f! M
! e& [! q! q4 B% ]8 A
const listener: SubscribeListener = (event) => {
5 q/ n# t, u' c" N  console.log('Received event', event);# R4 |- E: ]7 _$ M+ C6 \) \/ w% j
};
) [4 B3 e* Z5 n  x& t2 {2 S
  H. S+ a& t; |) @9 ~// Listen to all events.
% O4 f$ k* E) T* |1 k# @4 V% ~& ksubscribe(listener);: R, i+ E  r! a: Z

5 B5 i/ `$ N1 k& t: B// Remove the listener.3 I: J( h. B* q0 p  ^0 K) B4 f# a
unsubscribe(listener);

' T$ T7 v" E1 g6 {& A0 q/ @
% U+ g) H: K3 `# q, @
$ X  \" K! `5 b2 j
* e3 X1 e; c( e, a9 |  K9 P

0 U5 c/ b9 E9 a' S$ X( O6 f- c" r( b4 @

% V6 \" F$ D7 k/ v# |( m5 w1 T- d. f( I& S3 N/ `
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则