تنظیم امکان بازگشت و رفتار دکمه بازگشت در اپسان

مقدمه

در این راهنما، به نحوه‌ی مدیریت رفتار دکمه بازگشت در اپسان وب پرداخته می‌شود. اپسان وب به توسعه‌دهندگان اجازه می‌دهد تا امکان بازگشت و عملکرد دکمه بازگشت را سفارشی کنند و یا از رفتار پیش‌فرض آن استفاده کنند.


استفاده از رفتار پیش‌فرض

رفتار پیش‌فرض اپسان بر اساس تعداد صفحات موجود در تاریخچه عمل می‌کند:

  1. بسته شدن اپلیکیشن: اگر تعداد صفحات موجود در تاریخچه ≤ 1 باشد، اپلیکیشن بسته می‌شود.
  2. بازگشت به صفحه قبلی: اگر تاریخچه بیشتر از 1 صفحه داشته باشد، به صفحه قبلی بازمی‌گردد. در صورت تعریف customBackHandler، این تابع به جای رفتار پیش‌فرض اجرا می‌شود.

پاک کردن تاریخچه

برای پاک کردن تاریخچه و تنظیم تعداد صفحات موجود، می‌توانید از تابع پیش‌فرض clearBackStack استفاده کنید:

AppsanWeb.getAvailableHistoryCountProvider()?.clearBackStack();

قابلیت customBackHandler در AppsanWeb

این متد تنها در صورتی صدا می شود که availableBackCount بزرگ تر از 1 باشد.

  1. تعریف customBackHandler: این متغیر می‌تواند تابع شما را ذخیره کند که هنگام فشار دادن دکمه بازگشت اجرا می‌شود.
  2. متد setCustomBackHandler: برای تنظیم تابع سفارشی استفاده می‌شود:
    AppsanWeb.setCustomBackHandler(() => {
      // handle back here your way
    });

توجه: هنگام استفاده از تابع سفارشی، رفتار پیش‌فرض اجرا نمی‌شود و می‌توانید با اکشن app/forceback بازگشت انجام دهید.


تنظیم availableBackCount

برای تغییر availableBackCount در سوپر اپ از روش زیر استفاده کنید

(AppsanWeb as any).instance.post((AppsanWeb as any).MESSAGE_TYPE_AVAILABLE_HISTORY_COUNT, <back_count>);

سفارشی‌سازی امکان بازگشت

برای تعریف رفتار خاص بازگشت، یک کلاس جدید از رابط AvailableBackCountProvider پیاده‌سازی کنید. این رابط شامل متدهای زیر است:

  • getAvailableHistoryCount(): تعداد صفحات موجود را برمی‌گرداند.
  • clearBackStack(): تاریخچه را پاک و بازنشانی می‌کند.

نمونه: غیرفعال کردن بازگشت و بستن مینی‌اپ

import { AppsanWeb, AvailableBackCountProvider } from "./AppsanWeb";

export class DisableBackAndCloseProvider implements AvailableBackCountProvider {
  getAvailableHistoryCount(): number {
    return 1;
  }

  clearBackStack(): void {
    // No-op: back is effectively disabled
  }
}

با بازگرداندن ۱ در getAvailableHistoryCount()، بازگشت غیرفعال و مینی‌اپ بسته می‌شود.

نمونه پیاده‌سازی ارائه‌دهنده سفارشی تأیید قبل از بازگشت

import { AppsanWeb, AvailableBackCountProvider } from "./AppsanWeb";

export class ConfirmableBackCountProvider implements AvailableBackCountProvider {
private availableHistoryCount = 1;

constructor() {
// Patch history.pushState so we can track forward navigation
const h = window.history as any;
const originalPushState = h.pushState;
h.pushState = (...args: any[]) => {
this.onPushState();
return originalPushState.apply(h, args);
};

// Track browser back/forward via popstate
window.addEventListener("popstate", () => this.onPopState());

// Hook custom back handler to show a confirmation dialog
AppsanWeb.setCustomBackHandler(() => this.showConfirmationDialog());
}

private onPushState(): void {
this.availableHistoryCount++;
(AppsanWeb as any).instance.post(
(AppsanWeb as any).MESSAGE_TYPE_AVAILABLE_HISTORY_COUNT,
this.availableHistoryCount
);
}

private onPopState(): void {
this.availableHistoryCount = Math.max(0, this.availableHistoryCount - 1);
(AppsanWeb as any).instance.post(
(AppsanWeb as any).MESSAGE_TYPE_AVAILABLE_HISTORY_COUNT,
this.availableHistoryCount
);
}

getAvailableHistoryCount(): number {
return this.availableHistoryCount;
}

clearBackStack(): void {
this.availableHistoryCount = 1;
(AppsanWeb as any).instance.post(
(AppsanWeb as any).MESSAGE_TYPE_AVAILABLE_HISTORY_COUNT,
1
);
}

private showConfirmationDialog(): void {
if (confirm("آیا مطمئن هستید می‌خواهید بازگشت کنید؟")) {
history.back();
}
}
}

نحوه استفاده

  1. نمونه سازنده را بسازید:
    const backHandler = new ConfirmableBackCountProvider();
  2. کلاس ساخته شده را به setAppsanBackCountProvider بدهید