Misskey: iOS/macOS Safariでpost-formやノヌトメニュヌをたたに衚瀺できない

Created on 12 Jul 2020  Â·  87Comments  Â·  Source: syuilo/misskey

事象

どういうわけか、storeにpostFormActionsやnoteActionsが存圚しないこずがある。

再珟条件が䞍明。

バヌゞョン

Safari

13.1.1 (15609.2.9.1.2)

v14だず普通に動くらしい*

Misskey

Misskey v12.41.0 ~2

🐛Bug 🖥Client

Most helpful comment

再珟条件

  1. 耇数のタブでMisskeyを開いおいる状態で、
  2. 片方でlocalStorageの曎新を行うず、
  3. もう片方でstateが消える

原因

Misskeyでは、耇数のタブ間でlocalStorageに氞続化されたVuexの状態を同期する仕組みがあり、その凊理にバグがあった。具䜓的には、localStorageに曎新があるず、氞続化されないstateたでlocalStorageの情報で䞊曞きされ、結果的に氞続化されないstateは消えるこずになる。
圓該箇所: https://github.com/syuilo/misskey/blob/b6c3399abeab100f0991f5c77bc47919fdcbfaad/src/client/init.ts#L106-L112

解決策

store.replaceState(JSON.parse(localStorage['vuex']));

の郚分を、たるごず䞊曞きではなく珟圚のstateずマヌゞするようなコヌドにすればよい。

All 87 comments

this.$refs.text.focusがundefinedらしい

Misskeyのバヌゞョンいく぀

12.41.1 そういえばアプデしおないわ

でもpost-formは.2にアプデしおも倉わらなさそう 

ずいうか原因箇所の目星は぀いおる

https://github.com/syuilo/misskey/blob/develop/src/client/components/post-form.vue#L330

↑の箇所をnextTickにしたらやっぱり盎った

$store.state.postFormActions.lengthがないずいわれる゚ラヌも䞀緒に出おいたように蚘憶しおいるので、それが原因かもしれない

私のVueレベルが䜎いのでどうしお$store.state.postFormActionsが虚無なのかよくわからない

私のVueレベルが䜎いのでどうしお$store.state.postFormActionsが虚無なのかよくわからない

私もこれで頭抱えおる

ずいうか再珟条件もよくわからない

だからSafari固有のバグなのか()

謎すぎおもはやVue偎のバグを疑うレベル

iOS 14.0 b2 / Safari Technology Preview (Release 109 (Safari 14.0, WebKit 15610.1.17.2))だず普通に動く
Safari バヌゞョン13.1.1 (15609.2.9.1.2) はだめ

特定のブラりザバヌゞョンでのみ発生する珟象ずいうこず

原因、たぶんこれ これも違った
https://github.com/syuilo/misskey/pull/6484

12.41.0たでは党く報告されおいなかった/起きなかった気がするのだが、もしかしおPolyfill関連なのでは...?

polyfill消しお早くなったから間に合わなくなった説🥎

Can I use... Support tables for HTML5, CSS3, etc
https://caniuse.com/#feat=resizeobserver

倉曎点調べたらResizeObserverが出おきたので調べおみたしたがSafari偎の実装に問題ありが正しいのかも。
䞀応サポヌトされおいないずされおいるiOS 12.4.1/12.4.6で問題なくメニュヌを開くこずが確認できたした。

叀い iOS で問題なく動くのであれば、iOSではずりあえずResizeObserverを䜿甚するコヌドを無効化しおしたうのが良いのかな:thinking:

12.41.0たでは党く報告されおいなかった/起きなかった気がするのだが、もしかしおPolyfill関連なのでは...?

今回の゚ラヌは、プラグむンシステムに関連するプロパティが無いずいう゚ラヌ。だからプラグむンシステムが原因(なぜそうなるのかは謎)
Polyfillは無関係

image
たさかのSafari固有バグではなかった
macOS 10.15.5 + Firefox 78.0.2
でも Safari ほど確実に再珟はしない

undefinedになるのはどの時点からなのか(ペヌゞ読み蟌み盎埌からずか、それ以降からずか)ずか、undefinedになったずきその他のプロパティは有るのかなども調べるず䜕か手掛かりになりそう

ちょっず倖出するので垰ったらやる ず思ったけど私の環境だず再珟しないんだよな
iPhoneだずたたに再珟するけどiPhoneでデバッグは困難

Safariだず this.$refs.text.focus() でコケる時は this.$refs が空っぜい

image

その時の this.$el はこう
image

components に dynamic import を䜿っおる堎合それが終わらないず $refs が䜿えないらしい?
ref. https://forum.vuejs.org/t/refs-is-undefined-in-mounted/1700/4

$el や $refs が無いのは $store.state.postFormActions がundefinedになっお゚ラヌになっおるからコンポヌネントのマりント自䜓が倱敗しおるからずかではなく

っぜいな

䜕らかの理由で this.$store.state.postFormActions がundefinedなこずがある (なんで?)
image
そもそもこの゚ラヌが出る状態だず氞続化されおいるや぀しか this.$store.state に存圚しない?
image

https://github.com/syuilo/misskey/blob/aae9bc4cf4c583b4d675391fe3da2fa53b7f18e0/src/client/store.ts#L92-L106

本来はこうなるはず
image

うしろむきな解決案ずしお https://github.com/syuilo/misskey/commit/d327bb8ff1b8765e92d6815d244e74f0793f6157 で䞊げられた vuex のバヌゞョンを䞋げるなどがある

ずはいったものの https://github.com/vuejs/vuex/compare/v3.4.0...v3.5.1 察した倉曎はないな 

お手䞊げ🙌

せめおこのプロパティが消える珟象がい぀から起きおいたのかが分かればなぁ

実際は昔からこの珟象が起きおお、たたたた最近プラグむンシステム実装したおかげで()顕圚化したずいう可胜性があるんだよな

なんもわからん

Chrome拡匵機胜のVueDevToolには、Vuexの状態がどのように倉わっおきたかを履歎で芋れる機胜あるんだけど、それ芋お䜕か分かったりしないかな

あず、VuexずVuexPersistenceの゜ヌスコヌドを読んでみお最初に定矩したプロパティが消えおしたうようなこずが起こり埗る実装になっおないかも確認したい

しゅいろPCでは䞀回も再珟しないの぀らい

@rinsuki 再珟するコツずかある

キャッシュ有効/無効にしたりネットワヌク速床激遅にしおも再珟しないからそれらは無関係っぜいけど...

党くわかっおない、謎

@syuilo
怜玢ボックスっおやっぱり関係ないかしら

@syuilo
怜玢ボックスっおやっぱり関係ないかしら

はっきりしたこずは䜕も蚀えないけどさすがにCSSが圱響するずは考えにくい

@rinsuki ioじゃなく、ロヌカルの開発環境ずかでも再珟したした

io以倖では詊しおない

なるほど

ioは広告が入っおたりするからそれらが䞍具合を匕き起こしおる可胜性もれロではないな...

たぁほがれロだずは思うけど

再珟しないこずにはなかなか調査も難しい

他の小芏暡むンスタンスやロヌカルでも䞍具合を確認しおたす

なるほどなるほど

たたに普通に動くのが厄介

あヌずっずChromeでテストしおたけどrinsukiが䜿っおたのFirefoxか

でもアレか 仮にFirefoxで再珟できたずしおもVueDevToolが䜿えないからあたり調査の圹には立たないか

お手䞊げ🙌

いや、macは知らないけどFirefoxアドオンある

あらそうなのか

私のmacのFirefoxで再珟したせんでした 

ストアのdeviceUser/setTlが原因かも

発生条件ずしお、タむムラむンの切り替えをするずストアがだめになるこずが刀明したSafari

image

image

぀たり、氞続化するべきデヌタを倉曎するずストアがだめになる 

ふむふむ
こっちだずTL切り替えおも再珟しない

@syuilo Safari? FIrefox?

ChromeなのでFireFoxでもやっおみる

Firefoxでやっおも再珟しなかった

@tamaina aqzの環境だずTL切り替えるず100%再珟する

setTl 芋おも単に state.tl にオブゞェクトを代入しおるに過ぎないので謎

@syuilo iOS/macOS 最新develop+デバッグ甚コヌドで、SafariでTL切り替えるず100%ダメになりたす

あず、りィゞェットを挿入しおもダメになったのでpersistedstateの問題の可胜性が高くなった

@tamaina よかったら vuex-persistedstate を削陀した状態で再珟するか確認しおもらえるず嬉しい

import createPersistedState from 'vuex-persistedstate';

ず

    plugins: [createPersistedState({
        paths: ['i', 'device', 'deviceUser', 'settings', 'instance']
    })],

を削陀すればおK

ありがずう🥰🥰🥰
vuex-persistedstateが犯人でよさそう

['i', 'device', 'deviceUser', 'settings', 'instance']

で列挙した以倖のプロパティがすべお消えるこずを考えるず、reducerの凊理が䜕らかの原因でstateにそのたた䞊曞きされおいる(?)みたいな感じだろうなぁ

@syuilo persistedstate消したら盎りたしたキャッシュ削陀しお䞀応再確認したけどやっぱりそんな感じだった

これ以䞊詳现に調査するにはやっぱり手元で再珟しないず...

reducerはオプションで倖郚から指定できるっぜい

デフォルトのreducerでもコヌド的には問題なさそうに芋えるから謎

reducerがどうしたずころでストアのstateには圱響しないし、persistedstateのコヌドに問題はないように芋える

アプデしたWebpackのせいずかは

あ〜、報告忘れおた

persistedstateのオプションにreducer: (state, paths) => stateを远加したずころ、ちゃんず動くようになりたしたが党おのstateがlocalStorage.vuexに蚘録されたした

Webpackの問題だったらSafariだけバグが起きるっおこずは考えにくいか 

オブゞェクトの参照が入れ替わっおるずかそういうこずなんだろうけど  

localStorage.vuexにはちゃんずreducedなデヌタが入っおいるので入れ替わっおはないっぜい

぀いに原因が分かった

再珟条件

  1. 耇数のタブでMisskeyを開いおいる状態で、
  2. 片方でlocalStorageの曎新を行うず、
  3. もう片方でstateが消える

原因

Misskeyでは、耇数のタブ間でlocalStorageに氞続化されたVuexの状態を同期する仕組みがあり、その凊理にバグがあった。具䜓的には、localStorageに曎新があるず、氞続化されないstateたでlocalStorageの情報で䞊曞きされ、結果的に氞続化されないstateは消えるこずになる。
圓該箇所: https://github.com/syuilo/misskey/blob/b6c3399abeab100f0991f5c77bc47919fdcbfaad/src/client/init.ts#L106-L112

解決策

store.replaceState(JSON.parse(localStorage['vuex']));

の郚分を、たるごず䞊曞きではなく珟圚のstateずマヌゞするようなコヌドにすればよい。

「ひず぀のタブしか開いおいないが、この珟象が発生する」ずいう報告もチラホラあるな
これに぀いおはよくわからないが、いずれにせよ䞊に挙げた圓該コヌドの修正で盎るはず

Was this page helpful?
0 / 5 - 0 ratings