feat(cli): using postmessage (#8497)

* feat(cli): export action functions

* fix: listenToSyncPath

* fix: config.site.simulatorUrl
This commit is contained in:
neverland
2021-04-10 15:44:55 +08:00
committed by GitHub
parent a066e3a4bb
commit f46f59fce2
6 changed files with 116 additions and 72 deletions

View File

@@ -2,28 +2,44 @@
* 同步父窗口和 iframe 的 vue-router 状态
*/
import { iframeReady, isMobile } from '.';
import { iframeReady } from '.';
window.syncPath = function() {
function getCurrentDir() {
const router = window.vueRouter;
const isInIframe = window !== window.top;
const currentDir = router.currentRoute.value.path;
return router.currentRoute.value.path;
}
if (isInIframe) {
window.top.replacePath(currentDir);
} else if (!isMobile) {
const iframe = document.querySelector('iframe');
if (iframe) {
iframeReady(iframe, () => {
iframe.contentWindow.replacePath(currentDir);
});
export function syncPathToParent() {
window.top.postMessage(
{
type: 'replacePath',
value: getCurrentDir(),
},
'*'
);
}
export function syncPathToChild() {
const iframe = document.querySelector('iframe');
if (iframe) {
iframeReady(iframe, () => {
iframe.postMessage(
{
type: 'replacePath',
value: getCurrentDir(),
},
'*'
);
});
}
}
export function listenToSyncPath(router) {
window.addEventListener('message', (event) => {
const path = event.data || '';
// should preserve hash for anchor
if (router.currentRoute.value.path !== path) {
router.replace(path).catch(() => {});
}
}
};
window.replacePath = function(path = '') {
// should preserve hash for anchor
if (window.vueRouter.currentRoute.value.path !== path) {
window.vueRouter.replace(path).catch(() => {});
}
};
});
}