モバイル版アプリ(実機)でスクロール位置を制御したい

モバイル版アプリ(実機)でスクロール位置を制御したいです。
あるレコードを選んで詳細画面に遷移した後戻ってきたら、遷移前のスクロール位置になるようにしたいです。

以前の投稿では、 URLの「k」の後ろに「m」を入れる方法で確認していました。
この方法では問題なく動きますが、
実際iPhoneのモバイルアプリ(ver3.0.5)で確認してみると、うまくいきません。
「戻る」ボタンで戻った場合は、一覧ページのトップ位置に遷移します。
スワイプで戻った場合は一瞬遷移前のスクロール位置になるのですがその後に読み込みが入って一覧ページのトップ位置に遷移してしまいます。

その他確認したこと
・Safari(604.1)
「戻る」ボタンで戻る:一覧ページのトップ位置に遷移
スワイプで戻る:一瞬遷移前のスクロール位置になるが、その後に読み込みが入って一覧ページのトップ位置に遷移
・Chrome(136)
「戻る」ボタンで戻る:一覧ページのトップ位置に遷移
スワイプで戻る:一瞬遷移前のスクロール位置になるが、その後に読み込みが入って一覧ページのトップ位置に遷移

スクロールの制御にはこのような記述を書いています。

(() => {
    'use strict';
    kintone.events.on('mobile.app.record.index.show', (event) => {
              // sessionStorage用にキーの値を作成
          var skey = 'mobile-top-' + event.appId;
          // sessionStorageのキーに対応する値を取得
          var strTop = window.sessionStorage.getItem(skey);
  
          // 現在のURLのハッシュ部分を取得
          var hashAfter = window.location.hash;
          console.log('hashAfter:', hashAfter);
          var hashBefore = window.sessionStorage.getItem('hashBefore')
  
          // sessionStorageに保存したhashBeforeとhashAfterを比較
          // もし同じ値の場合(同じページの場合)
          if (hashBefore == hashAfter) {
  
              // strTopに値があれば
              if (strTop) {
                  //スクロール位置をstrTopに合わせる
                  $('.gaia-mobile-v2-viewpanel-contents').scrollTop(strTop);
              }
          }
  
          // ページ移動(詳細画面など)前に、現在のスクロール位置とハッシュ部分をsessionStorageに保存
          $(window).on('beforeunload', function (ev) {
              var top = $('.gaia-mobile-v2-viewpanel-contents').scrollTop();
              window.sessionStorage.setItem(skey, top);
              console.log('top:' + top)
  
              // 現在のURLのハッシュ部分を取得
              hashBefore = window.location.hash;
              // sessionStorageにhashBeforeの値を保存
              window.sessionStorage.setItem('hashBefore', hashBefore);
              console.log('hashBefore:', hashBefore);
          });
          return event;
    });
  })();
  

ひとまず、普通のモバイルビュー仕様でできました。
カスタムモバイルビューと組み合わせる場合は、
const detailLinks = document.querySelectorAll(‘.gaia-mobile-v2-app-index-recordlist-table-cell-first-recorddetail-link’);で適切なクラスを指定する必要がありそうです。

(() => {
    'use strict';

    // レコード一覧画面で発生するイベント
    kintone.events.on('mobile.app.record.index.show', (event) => {

        // sessionStorage用にキーの値を作成
        var skey = 'mobile-top-' + event.appId;
        
        // sessionStorageのキーに対応する値を取得
        var strTop = window.sessionStorage.getItem(skey);

        // 現在のURLのハッシュ部分を取得
        var hashAfter = window.location.hash;

        console.log('hashAfter:', hashAfter);
        alert('hashAfter:' + hashAfter);

        // sessionStorageに保存したhashBeforeの値を取得
        var hashBefore = window.sessionStorage.getItem('hashBefore')

        // sessionStorageに保存したhashBeforeとhashAfterを比較
        // もし同じ値の場合(同じページの場合)
        if (hashBefore == hashAfter) {

            // strTopに値があれば
            if (strTop) {
                //スクロール位置をstrTopに合わせる
                $('.gaia-mobile-v2-viewpanel-contents').scrollTop(strTop);
            }
        }

        // 詳細画面に遷移するリンクを取得(あとでカスタムモバイルビューに合わせた書き方に変える)
        const detailLinks = document.querySelectorAll('.gaia-mobile-v2-app-index-recordlist-table-cell-first-recorddetail-link');

        // 各リンクにクリックイベントを追加
        detailLinks.forEach(link => {
            link.addEventListener('click', function () {

                // 現在のスクロール位置を取得
                var top = $('.gaia-mobile-v2-viewpanel-contents').scrollTop();
                //sessionStorageに保存
                window.sessionStorage.setItem(skey, top);

                console.log('top:', top);
                alert('top: ' + top);

                // 現在のURLのハッシュ部分を取得
                hashBefore = window.location.hash;
                // sessionStorageにhashBeforeの値を保存
                window.sessionStorage.setItem('hashBefore', hashBefore);

                console.log('hashBefore:', hashBefore);
                alert('hashBefore:' + hashBefore);
            });
        });

        return event;
    });

})();

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。