javascript如何跨域
javascript如何跨域
javascript如何跨域一、跨域详细的说明可以看下表
说明 | 是否允许通信 |
同一域名下 | 允许 |
同一域名下不同文件夹 | 允许 |
同一域名,不同端口 | 不允许 |
同一域名,不同协议 | 不允许 |
域名和域名对应ip | 不允许 |
主域相同,子域不同 | 不允许 |
同一域名,不同二级域名 | 不允许 |
不同域名 | 不允许 |
二、javascript跨域请求数据解决方案
(1).document.domain+iframe的设置
对于主域相同而子域不同的例子,可以通过设置document.domain的办法来解决。
对于主域相同而子域不同的例子,可以通过设置document.domain的办法来解决。具体的做法是可以在两个域名的两个文件中分别加上document.domain = 主域名。然后通过a域名文件中创建一个iframe,去控制iframe的contentDocument,这样两个js文件之间就可以“交互”了。当然这种办法只能解决主域相同而二级域名不同的情况
document.domain = 主域名;
var ifr = document.createElement('iframe');
ifr.src = b域名页面;
ifr.style.display = 'none';
document.body.appendChild(ifr);
ifr.onload = function(){
var doc = ifr.contentDocument || ifr.contentWindow.document;
alert(doc.getElementsByTagName("h1")[0].childNodes[0].nodeValue);
};
(2).动态创建Script
虽然浏览器默认禁止了跨域访问,但并不禁止在页面中引用其他域的JS文件,并可以自由执行引入的JS文件中的function(包括操作cookie、Dom等等)。根据这一点,可以方便地通过创建script节点的方法来实现完全跨域的通信。
(3).利用iframe和location.hash
这个办法比较绕,但是可以解决完全跨域情况下的脚步置换问题。原理是利用location.hash来进行传值。在url#helloworld中的‘#helloworld’就是location.hash,改变hash并不会导致页面刷新,所以可以利用hash值来进行数据传递,当然数据容量是有限的。
(4).Window.name实现的跨域数据传输
iframe的src属性由外域转向本地域,跨域数据即由iframe的window.name从外域传递到本地域。这个就巧妙地绕过了浏览器的跨域访问限制,但同时它又是安全操作。
(5).使用HTML5 postMessage
HTML5中最酷的新功能之一就是 跨文档消息传输Cross Document Messaging。
调用方法
otherWindow.postMessage(message, targetOrigin);
方法说明
otherWindow: 对接收信息页面的window的引用。可以是页面中iframe的contentWindow属性;window.open的返回值;通过name或下标从window.frames取到的值。
message: 所要发送的数据,string类型。
targetOrigin: 用于限制otherWindow,“*”表示不作限制
(6).利用flash
除了上面六种方式,大家平时估计都在用脚本框架开发,在JQuery框架和ExtJs框架中处理JS跨域问题,常用JSONP来处理。JSONP格式处理跨域请求,大家可以了解JSONP格式相关知识。
- iframe跨域原理(详解使用postMessage解决iframe跨域通信问题)
- html5 postMessage(html5关于外链嵌入页面通信问题postMessage解决跨域通信)
- javascript如何跨域
- 浏览器为什么有跨域机制(详解window.open被浏览器拦截的解决方案)
- nginx反向代码解决跨域访问(nginx 解决跨域问题嵌入第三方页面)
- thinkphp5.1修改(ThinkPHP 5.1 跨域配置方法)
- axios如何跨域请求(axios取消请求与避免重复请求)
- vue和springboot分页开发实现(解决Vue+SpringBoot+Shiro跨域问题)
- laravel设置跨域请求(解决laravel 出现ajax请求419unknown status的问题)
- iframe如何解决跨域问题(关于iframe跨域使用postMessage的实现)
- vue跨域代理怎么写(解决vue $http的get和post请求跨域问题)
- iis配置网站授权(IIS的web.config中跨域访问设置方法)
- iframe解决跨域问题(跨域修改iframe页面内容详解)
- laravel对请求参数解密(Laravel开启跨域请求的方法)
- apache服务器对php的支持原理(php apache开启跨域模式过程详解)
- Flask框架踩坑之ajax跨域请求实现(Flask框架踩坑之ajax跨域请求实现)
- 太鸡贼了,这老小区轻松搞定了停车问题(这老小区轻松搞定了停车问题)
- 太鸡贼了,这老小区轻松搞定了停车问题(这老小区轻松搞定了停车问题)
- 节日我在岗|警景相融 平安相伴(节日我在岗警景相融)
- 战 疫 时刻 致敬每一位石化大学的 守护者(战疫时刻)
- 老弄堂里的市井味道(老弄堂里的市井味道)
- 小米音乐可绑定QQ音乐, QQ音乐 真的会消失在小米的设备上吗(小米音乐可绑定QQ音乐)
热门推荐
- laravel的验证规则(解决在Laravel 中处理OPTIONS请求的问题)
- python 文本文件读取方法(Python逐行读取文件中内容的简单方法)
- sql分析命令(详解SQL中的DQL查询语言)
- IEnumerable、GetEnumerator、IEnumerator之间的关系
- 开发者微信公众号开发流程(微信公众平台开发教程⑥ 微信开发集成类的使用图文详解)
- nginx配置详细讲解(Nginx服务快速入门教程)
- sqlserver去除空格函数(sqlServer实现去除字符串空格)
- laravel 模型(Laravel 模型关联基础教程详解)
- Visual Studio的browser link
- linux安装sqlserver 2008 r2(Ubuntu 下安装SQL Server教程)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9