تنظیم امکان بازگشت و رفتار دکمه بازگشت در اپسان
مقدمه
در این راهنما، به نحوهی مدیریت رفتار دکمه بازگشت در اپسان وب پرداخته میشود. اپسان وب به توسعهدهندگان اجازه میدهد تا امکان بازگشت و عملکرد دکمه بازگشت را سفارشی کنند و یا از رفتار پیشفرض آن استفاده کنند.
استفاده از رفتار پیشفرض
رفتار پیشفرض اپسان بر اساس تعداد صفحات موجود در تاریخچه عمل میکند:
- بسته شدن اپلیکیشن: اگر تعداد صفحات موجود در تاریخچه ≤ 1 باشد، اپلیکیشن بسته میشود.
- بازگشت به صفحه قبلی: اگر تاریخچه بیشتر از 1 صفحه داشته باشد، به صفحه قبلی بازمیگردد. در صورت تعریف
customBackHandler
، این تابع به جای رفتار پیشفرض اجرا میشود.
پاک کردن تاریخچه
برای پاک کردن تاریخچه و تنظیم تعداد صفحات موجود، میتوانید از تابع پیشفرض clearBackStack
استفاده کنید:
AppsanWeb.getAvailableHistoryCountProvider()?.clearBackStack();
قابلیت customBackHandler در AppsanWeb
این متد تنها در صورتی صدا می شود که availableBackCount بزرگ تر از 1 باشد.
- تعریف customBackHandler: این متغیر میتواند تابع شما را ذخیره کند که هنگام فشار دادن دکمه بازگشت اجرا میشود.
- متد 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();
}
}
}
نحوه استفاده
- نمونه سازنده را بسازید:
const backHandler = new ConfirmableBackCountProvider();
- کلاس ساخته شده را به setAppsanBackCountProvider بدهید
No Comments