// H5 环境修复
|
|
export function fixH5Environment() {
|
|
// #ifdef H5
|
|
try {
|
|
// 修复路由 meta 属性访问问题
|
|
const originalGetCurrentPages = getCurrentPages;
|
|
window.getCurrentPages = function() {
|
|
try {
|
|
const pages = originalGetCurrentPages();
|
|
// 确保页面对象有基本的路由信息
|
|
if (pages && pages.length > 0) {
|
|
pages.forEach(page => {
|
|
if (page && !page.route) {
|
|
page.route = page.$page?.fullPath || '/';
|
|
}
|
|
if (page && page.route && !page.$page?.meta) {
|
|
page.$page = page.$page || {};
|
|
page.$page.meta = page.$page.meta || {};
|
|
}
|
|
});
|
|
}
|
|
return pages;
|
|
} catch(e) {
|
|
console.warn('getCurrentPages 修复失败:', e);
|
|
return [];
|
|
}
|
|
};
|
|
|
|
// 修复 History API
|
|
const originalReplaceState = window.history.replaceState;
|
|
window.history.replaceState = function(state, title, url) {
|
|
try {
|
|
// 确保 URL 格式正确
|
|
if (url && typeof url === 'string') {
|
|
// 修复格式不正确的 URL
|
|
if (url.startsWith('https:/#/')) {
|
|
url = url.replace('https:/#/', window.location.origin + '/#/');
|
|
}
|
|
// 如果 URL 不包含完整的域名,添加基础路径
|
|
if (url.startsWith('#/')) {
|
|
url = window.location.origin + window.location.pathname + url;
|
|
}
|
|
}
|
|
return originalReplaceState.call(this, state, title, url);
|
|
} catch(e) {
|
|
console.warn('History.replaceState 修复失败:', e);
|
|
return null;
|
|
}
|
|
};
|
|
|
|
// 修复路由跳转相关问题
|
|
const originalNavigateTo = uni.navigateTo;
|
|
uni.navigateTo = function(options) {
|
|
try {
|
|
return originalNavigateTo(options);
|
|
} catch(e) {
|
|
console.warn('uni.navigateTo 失败:', e);
|
|
// 降级处理
|
|
window.location.href = window.location.origin + window.location.pathname + '#' + options.url;
|
|
}
|
|
};
|
|
|
|
const originalReLaunch = uni.reLaunch;
|
|
uni.reLaunch = function(options) {
|
|
try {
|
|
return originalReLaunch(options);
|
|
} catch(e) {
|
|
console.warn('uni.reLaunch 失败:', e);
|
|
// 降级处理
|
|
window.location.href = window.location.origin + window.location.pathname + '#' + options.url;
|
|
}
|
|
};
|
|
|
|
console.log('H5 环境修复完成');
|
|
} catch(e) {
|
|
console.warn('H5 环境修复失败:', e);
|
|
}
|
|
// #endif
|
|
}
|
|
|
|
// 修复 URL 参数解析
|
|
export function fixUrlParams() {
|
|
// #ifdef H5
|
|
try {
|
|
function GetQueryString(name) {
|
|
const url = window.location.href;
|
|
try {
|
|
const cs = url.split('?')[1];
|
|
if (cs) {
|
|
const cs_arr = cs.split('&');
|
|
for (let i = 0; i < cs_arr.length; i++) {
|
|
if (cs_arr[i].split('=')[0] === name) {
|
|
sessionStorage.setItem('vid', cs_arr[i].split('=')[1]);
|
|
}
|
|
}
|
|
}
|
|
} catch(e) {
|
|
console.warn('URL参数解析失败:', e);
|
|
}
|
|
}
|
|
|
|
GetQueryString('vid');
|
|
} catch(e) {
|
|
console.warn('URL参数修复失败:', e);
|
|
}
|
|
// #endif
|
|
}
|