关于vue-router路径计算问题
昨天刚刚发表了一个前端跨域新方案尝试,今天在开发中就遇到的了问题。 起因前端使用的是vue-router组件的 分析问题我们的api站点在 api.com 而静态资源在 static.com,页面的base标签也指向static 然而,在访问 经过一些简单的断点调试,锁定了以下代码 [source]: https://github.com/vuejs/vue-router/blob/dev/dist/vue-router.esm.js [vue-router.esm.js][source] tag
var baseEl = document.querySelector('base');
base = (baseEl && baseEl.getAttribute('href')) || '/';
} else {
base = '/';
}
}
// make sure there's the starting slash
if (base.charAt(0) !== '/') {
base = '/' + base;
}
// remove trailing slash
return base.replace(//$/,'')
}
这段代码的作用是设置路由的base路径,如果有兴趣一路跟踪的话会发现这个 再看代码,他会判断如果base是空的,那么就会给一个默认值: 如果实在浏览器(非服务器环境)下执行,那么会调用 在我们实际的场景中,这里得到一个跨域的绝对地址,然后紧接着 当url第一个字符不是 我的是绝对地址 修改 }else if (base.charAt(0) !== '/') {
base = '/' + base; } 为了尽量少破坏源码,这里加了一个空的if,当url是由协议开始时,认为是绝对路径。 * 绝对路径还有一种形式是 测试经过第一次修改,再次访问页面依然有问题,访问的页面依然是 继续分析再次跟踪源码后发现 [vue-router.esm.js][source] var ref = this;
var fromRoute = ref.current; this.transitionTo(location,function (route) { pushState(cleanPath(this$1.base + route.fullPath)); handleScroll(this$1.router,route,fromRoute,false); onComplete && onComplete(route); },onAbort); }; //561行~563行 function cleanPath (path) { return path.replace(////g,'/') } 在发生 而这里的处理更简单,更粗暴,问题也更大。 他直接将2个斜杠 所以在处理 继续修改如果是协议开始,则排除协议内容之后,将2个或2个以上连续在一起的斜杠替换为1个斜杠。 ** 完成提交pull https://github.com/vuejs/vue-router/pull/1353/files 话说vue-router的url处理比起Url.js来说真的是太粗暴了... 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |