misskey-dev / misskey-hub-next

Website for Misskey since Dec 2023. Built on Nuxt. I18n is available on Crowdin.
https://misskey-hub.net/
GNU Affero General Public License v3.0
132 stars 44 forks source link

blogページからの離脱リンクが全部詰まる #212

Closed kakkokari-gtyih closed 1 month ago

kakkokari-gtyih commented 3 months ago

💡 概要

blogの投稿ページに入ると抜け出せなくなる

原因が謎

🥰 期待されるふるまい

blogの投稿内にあるすべてのリンクが機能する

🤬 実際のふるまい

プログレスバーのみ動く コンソールには何も出力されない

📝 再現方法

  1. misskey-hub.net
  2. blogの投稿を開く

💻 動作環境

* Model and OS of the device(s): Windows 11 or later
* Browser: Not/A)Brand 8.0.0.0
* Viewport Size: 1920x945
* (UA Detected Using getHighEntropyValues)
* 【自動入力済】追記は不要です

【開発者向け】自分でこのバグに対処しますか?

fruitriin commented 3 months ago

以下の書き込みは(まだ)MisskeyHub自体のリポジトリを読まずにブラウザでアクセスした範囲でわかることで書いています


ソースマップがないからかなり雑な推測では関係するのはこれかなあ https://misskey-hub.net/_nuxt/BSbzkXBJ.js

function B(U, ee) {
        let Q;
        const [ne,be,Pe] = d1(U, ee);
        Q = ci(ne.reverse(), "beforeRouteLeave", U, ee);
        for (const I of ne)
            I.leaveGuards.forEach(V=>{
                Q.push(Rn(V, U, ee))
            }
            );
        const R = N.bind(null, U, ee);
        return Q.push(R),
        Ue(Q).then(()=>{
            Q = [];
            for (const I of i.list())
                Q.push(Rn(I, U, ee));
            return Q.push(R),
            Ue(Q)
        }
        ).then(()=>{
            Q = ci(be, "beforeRouteUpdate", U, ee);
            for (const I of be)
                I.updateGuards.forEach(V=>{
                    Q.push(Rn(V, U, ee))
                }
                );
            return Q.push(R),
            Ue(Q)
        }
        ).then(()=>{
            Q = [];
            for (const I of Pe)
                if (I.beforeEnter)
                    if (Bt(I.beforeEnter))
                        for (const V of I.beforeEnter)
                            Q.push(Rn(V, U, ee));
                    else
                        Q.push(Rn(I.beforeEnter, U, ee));
            return Q.push(R),
            Ue(Q)
        }
        ).then(()=>(U.matched.forEach(I=>I.enterCallbacks = {}),
        Q = ci(Pe, "beforeRouteEnter", U, ee, D),
        Q.push(R),
        Ue(Q))).then(()=>{
            Q = [];
            for (const I of a.list())
                Q.push(Rn(I, U, ee));
            return Q.push(R),
            Ue(Q)
        }
        ).catch(I=>nn(I, 8) ? I : Promise.reject(I))
    }

経験から推測を重ねると、リンクを踏む際にどのURLに遷移するか決定する際に、それがコンテンツ内部であればRouerPush(VueRouter)として扱う、外部のコンテンツならHistoryAPI的に遷移する必要があって、その絡みでなにかしているか、beforeRouteEnterにカスタマイズを入れていて、それがi18n用のURL付加分の処理とうまく噛み合っていないのかなあという感じがしました

kakkokari-gtyih commented 3 months ago

ここですね…前までは動いてたんですが

https://github.com/misskey-dev/misskey-hub-next/blob/5374ab7a1b1cf802a0e29e66873bbe559dcaccf2/pages/blog/%5Bslug%5D.vue#L43-L59

fruitriin commented 3 months ago

https://github.com/misskey-dev/misskey-hub-next/blob/5374ab7a1b1cf802a0e29e66873bbe559dcaccf2/pages/blog/%5Bslug%5D.vue#L50

ここで return void してることになってますけどこれなにが起きるんですっけ デフォルトの挙動ではなく本当に何も起きない気がする?

kakkokari-gtyih commented 3 months ago

ここで return void してることになってますけどこれなにが起きるんですっけ

If nothing, undefined or true is returned, the navigation is validated, and the next navigation guard is called.

https://router.vuejs.org/guide/advanced/navigation-guards.html

fruitriin commented 3 months ago

ううん、推測が外れたみたいです。 引き続き私のほうでも調べてみます

kakkokari-gtyih commented 2 months ago

なんか治ってる気がする