((routerType, path) => {
const result = { success: false, error: null, newPath: null };
try {
switch (routerType) {
case 'nextjs':
if (window.next?.router?.push) {
window.next.router.push(path);
result.success = true;
result.newPath = path;
} else {
history.pushState({}, '', path);
window.dispatchEvent(new PopStateEvent('popstate', { state: {} }));
result.success = true;
result.newPath = path;
}
break;
case 'vue-router':
const vueApp = document.querySelector('[data-v-app]')?.__vue_app__;
const router = vueApp?.config?.globalProperties?.$router;
if (router) {
router.push(path);
result.success = true;
result.newPath = path;
} else {
const vue2Router = document.querySelector('#app')?.__vue__?.$router;
if (vue2Router) {
vue2Router.push(path);
result.success = true;
result.newPath = path;
} else {
result.error = 'Vue router not found';
}
}
break;
case 'react-router':
case 'angular-router':
case 'history-api':
default:
history.pushState({}, '', path);
window.dispatchEvent(new PopStateEvent('popstate', { state: {} }));
result.success = true;
result.newPath = location.pathname;
break;
}
} catch (e) {
result.error = e.message || String(e);
}
return JSON.stringify(result);
})