๐ 1:1 ๋ฌธ์ํ๊ธฐ๊ฐ safari ์์๋ง ๋์์ ์ํด์!
์ผ๋ง์ ์ ํญ๊ณต์ชฝ QA ์ค์ ๋ค์๊ณผ ๊ฐ์ ์ด์๊ฐ ์์์ต๋๋ค.
์์ธ์ ํ์ ํ๊ธฐ์ํด safari ๋ธ๋ผ์ฐ์ ์์ ๋์ ์ ํ์ ํด๋ณด๋,
๋ฌธ์ ๋ฒํผ ํด๋ฆญ ์ ์์ฐฝ์ผ๋ก ์ด๊ธฐ ๋์ ํ์ ์ฐจ๋จ ์๋ฟ์ด ๋จ๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค.
๐ค ์์ธ์ด ๋ญ๊น?
safari ๋ธ๋ผ์ฐ์ ์์ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ ์ ์์ ์ผ๋ก ๋์ํ์ง ์์ต๋๋ค.
<button onClick={async () => {
await asyncJob()
window.open('url', '_blank'); // โ
} />
์ด๋ safari ๋ธ๋ผ์ฐ์ ์์ ์์ฐฝ์ ์ด๋, ์ฌ์ฉ์์ ์ ๋ ฅ์ ๊ณง๋ฐ๋ก ๋ฐ์ํ ์ ์๋ ์ํฉ์ด๋ผ๋ฉด
window.open ์ก์ ์ ๋ง๊ธฐ ๋๋ฌธ์ ๋๋ค.
(๋ํ์ ์ผ๋ก ๋น๋๊ธฐ ์์ฒญ์ ์ํํ ๋ค ๋ฆฌ๋ค์ด๋ ํธ ํ๋ ๊ฒ์ด ์๊ฒ ๋ค์)
๐ ์ด๋ป๊ฒ ๊ณ ์น๋ฉด ๋ ๊น?
๐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ฝ๋
๊ธฐ์กด์๋ ์์ฐฝ์ผ๋ก ์ด๊ธฐ ์ ์ API ํธ์ถ์ ํตํด์ ๊ณ ๊ฐ ID ๋ฅผ ๋ถ๋ฌ์
์ด๋ํ๋ ค๋ ๊ณ ๊ฐ๋ฌธ์ ํ์ด์ง URL์ ์ฝ์ ํ๋ ๋ก์ง์ด ์์์ต๋๋ค.
const handleRedirectToCsPage = async () => {
const { uid } = await fetchUserId()
window.open(`cs/${uid}/...`, '_blank')
}
<button onClick={handleRedirectToCsPage}>๊ณ ๊ฐ๋ฌธ์</button>
๐จ ๋ฆฌํฉํ ๋งํ๊ธฐ
๊ทผ๋ฐ uid ๋ ์ฌ์ค ํธ์ถํ๋ ์์ ์ ๋ถ๋ฌ์ฌ ํ์๊ฐ ์์ต๋๋ค.
ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๋ฐ๋๋ ๊ฐ์ด ์๋๊ธฐ ๋๋ฌธ์, ํ์ด์ง ๋ก๋ ์์ ์ ๋ถ๋ฌ์ ์ค์ ํ๋ฉด ๋๋ ๊ฒ์ ๋๋ค.
๋ค๋ง uid ๋ฅผ ๋ถ๋ฌ์ค์ง ์์ ์ํ์์๋ ๊ณ ๊ฐ๋ฌธ์ ํ์ด์ง์ ์ ๊ทผ์ ๋ง์์ผํ๊ธฐ์
๋ฐฉ์ด ๋ก์ง๋ง ์ถ๊ฐํด์ฃผ๋ ๋ฐฉํฅ์ผ๋ก ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ต๋๋ค.
const [uid, setUid] = useState() // โ
cs user id ๋ฅผ ์ ์ฅํ ์ํ๊ฐ์ถ๊ฐ
const handleRedirectToCsPage = () => {
if (uid) {
window.open(`cs/${uid}/...`, '_blank') // โ
์ผ๋ฐ ํจ์๋ก ๋ณ๊ฒฝํ๊ณ uid ์ฒดํฌ!
}
}
useEffect(() => {
const fetchAndSetUid = async () {
const { uid } = await fetchUserId()
setUid(uid) // โ
ํ์ด์ง ๋ก๋ ์ดํ์ ๋น๋๊ธฐ๋ก ์ค์
}
fetchAndSetUid()
}, [])
<button onClick={handleRedirectToCsPage}>๊ณ ๊ฐ๋ฌธ์</button>
๐ก ๊ทธ์ธ์ ์์๋๋ฉด ์ข์ ๋ค๋ฅธ ๋ฐฉ๋ฒ
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ฐํํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋น์ด์๋ ์์ฐฝ์ ์ด๊ณ , ๋น๋๊ธฐ ๋ก์ง ์ํ์ด ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฐ ๋ค์
ํด๋น ๋น์ด์๋ ์ฐฝ์ ์ด๋ํ ์ฃผ์๋ฅผ ํ ๋นํด์ฃผ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
์ด๋ฒ์๋ ์ด๋ ๊ฒ ํ์ง ์์๋ ๋ฆฌํฉํ ๋ง์ผ๋ก ๊ฐ๋จํ๊ฒ ํด๊ฒฐ์ด ๋๋ ๋ฌธ์ ์๊ธฐ ๋๋ฌธ์
๋์ค์ ๋น์ทํ ์ด์๊ฐ ์๊ธด๋ค๋ฉด ๊ณ ๋ คํด๋ด์ผ๊ฒ ๋ค์.
on('click', () => {
const open = window.open('about:blank', '_blank')
setTimeout(() => open.location.href == '<https://somepath.com>', 500)
})
์ฌ๊ธฐ์๋ ์์๋ฅผ ์ํด ๋น๋๊ธฐ ๋์์ setTimeout ์ผ๋ก ํ์ง๋ง,
API ํธ์ถ์ด๋ ๊ธฐํ ๋ค๋ฅธ ๋ก์ง๋ค๋ก๋ ๋์ฒดํ ์ ์์ ๊ฒ์ ๋๋ค.
๐ ์ฐธ๊ณ ์๋ฃ
https://github.com/microsoft/vscode/issues/118731
Why open link is not working inside a async handler on iPad Safari?
'๐ก issue' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
storybook ์์ styled component css prop ์ ์ฉ์ด ์๋๋ค๋ฉด? (0) | 2023.05.15 |
---|---|
JavaScript ๋ก ์์ฑํ csv ํ์ผ์์ ํ๊ธ์ด ๊นจ์ง๋ค๋ฉด? (0) | 2023.03.18 |
-webkit-overflow-scrolling ์์ฑ๊ณผ stacking context ์ด์ (0) | 2022.07.04 |
Next.js window is not defined ์์ธ ๋ฐ ํด๊ฒฐ๋ฐฉ๋ฒ (0) | 2022.06.17 |
Safari ๋ธ๋ผ์ฐ์ scroll-behavior ์ด์ (0) | 2022.06.11 |
๐ฌ ๋๊ธ