enhane: 完全ログアウト時にすべてのタブがウェルカムページへ移動するように (#7928)
* enhane: unison-reloadに指定したパスに移動できるように * null * null * null * add comments
This commit is contained in:
		
							parent
							
								
									1c38c7010d
								
							
						
					
					
						commit
						e2862ed097
					
				
					 3 changed files with 17 additions and 7 deletions
				
			
		|  | @ -61,7 +61,7 @@ export async function signout() { | |||
| 	document.cookie = `igi=; path=/`; | ||||
| 
 | ||||
| 	if (accounts.length > 0) login(accounts[0].token); | ||||
| 	else unisonReload(); | ||||
| 	else unisonReload('/'); | ||||
| } | ||||
| 
 | ||||
| export async function getAccounts(): Promise<{ id: Account['id'], token: Account['token'] }[]> { | ||||
|  | @ -122,7 +122,9 @@ export async function login(token: Account['token'], redirect?: string) { | |||
| 	await addAccount(me.id, token); | ||||
| 
 | ||||
| 	if (redirect) { | ||||
| 		reloadChannel.postMessage('reload'); | ||||
| 		// 他のタブは再読み込みするだけ
 | ||||
| 		reloadChannel.postMessage(null); | ||||
| 		// このページはredirectで指定された先に移動
 | ||||
| 		location.href = redirect; | ||||
| 		return; | ||||
| 	} | ||||
|  |  | |||
|  | @ -93,7 +93,10 @@ if (defaultStore.state.reportError && !_DEV_) { | |||
| document.addEventListener('touchend', () => {}, { passive: true }); | ||||
| 
 | ||||
| // 一斉リロード
 | ||||
| reloadChannel.addEventListener('message', () => location.reload()); | ||||
| reloadChannel.addEventListener('message', path => { | ||||
| 	if (path !== null) location.href = path; | ||||
| 	else location.reload(); | ||||
| }); | ||||
| 
 | ||||
| //#region SEE: https://css-tricks.com/the-trick-to-viewport-units-on-mobile/
 | ||||
| // TODO: いつの日にか消したい
 | ||||
|  |  | |||
|  | @ -1,10 +1,15 @@ | |||
| // SafariがBroadcastChannel未実装なのでライブラリを使う
 | ||||
| import { BroadcastChannel } from 'broadcast-channel'; | ||||
| 
 | ||||
| export const reloadChannel = new BroadcastChannel<'reload'>('reload'); | ||||
| export const reloadChannel = new BroadcastChannel<string | null>('reload'); | ||||
| 
 | ||||
| // BroadcastChannelを用いて、クライアントが一斉にreloadするようにします。
 | ||||
| export function unisonReload() { | ||||
| 	reloadChannel.postMessage('reload'); | ||||
| 	location.reload(); | ||||
| export function unisonReload(path?: string) { | ||||
| 	if (path !== undefined) { | ||||
| 		reloadChannel.postMessage(path); | ||||
| 		location.href = path; | ||||
| 	} else { | ||||
| 		reloadChannel.postMessage(null); | ||||
| 		location.reload(); | ||||
| 	} | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue