/** * 同步父窗口和 iframe 的 vue-router 状态 */ import { setLang } from './lang'; import { iframeReady, isMobile } from '.'; export function initIframeRouter() { window.syncPath = function () { const router = window.vueRouter; const isInIframe = window !== window.top; const currentDir = router.history.current.path; const pathParts = currentDir.split('/'); let lang = pathParts[0]; if (currentDir[0] === '/') { lang = pathParts[1]; } if (!isInIframe && !isMobile) { const iframe = document.querySelector('iframe'); if (iframe) { iframeReady(iframe, () => { iframe.contentWindow.changePath(lang, currentDir); }); } setLang(lang); } else if (isInIframe) { window.top.changePath(lang, currentDir); } }; window.changePath = function (lang, path = '') { setLang(lang); // should preserve hash for anchor if (window.vueRouter.currentRoute.path !== path) { window.vueRouter.replace(path).catch(() => {}); } }; }