|
|
- // 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
- }
|