持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
在前端经常遇到跨域问题,在Vue项目中常用Proxy来解决跨域,在不使用框架的页面中,有时会使用iframe来嵌套另一个网站链接。但是由于网站的限制,导致无法通过这种形式访问。
于是便有了如下解决方案:
解决方案
在页面中嵌入了 iframe ,通过js 代码设置其访问路径,并在连接后面拼接encodeURI(text),即可嵌入成功。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>iframe跨域</title>
</head>
<body>
<iframe id="frame" src="###"></iframe>
<ul id="ct">
<li>这里是内容1</li>
<li>这里是内容2</li>
</ul>
<script>
window.onload = function(){
// var text = document.getElementById('ct').innerHTML;
var text = "<li>这里是内容</li>";
document.getElementById('frame').src="https://www.test.com/"+encodeURI(text);
}
</script>
</body>
</html>
encodeURI
URI:通用资源标识符(UniformResourceIdentifier)
encodeURI() 函数可把字符串作为 URI 进行编码
执行如下代码:
运行结果:
- encodeURIComponent()也是Javascript中对URL编码的函数 区别:encodeURI 中特殊含义的符号"; / ? : @ & = + $ , #“不进行编码,encodeURIComponent()可以进行编码
decodeURI
decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解码
执行如下代码:
运行结果:
关于跨域
关于跨域首先要了解浏览器的同源策略。同源是指"协议+域名+端口"三者相同(两个不同的域名指向同一个ip地址也不是同源),它可以使页面不易受到XSS、CSFR等攻击。
分类大致如下,有些还可以进行细分:
- JSONP跨域
- 跨域资源共享(CORS)
- nginx代理跨域
- nodejs中间件代理跨域
- iframe跨域
- WebSocket协议跨域
跨域在原生js中、jquery、Vue、NodeJS 等有不同的实现方式,还有根据不同场景具体分析。