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格式相关知识。
- nginx跨域怎么用(如何利用map实现Nginx允许多个域名跨域)
- laravel设置跨域请求(Laravel实现ApiToken认证请求)
- iis配置网站授权(IIS的web.config中跨域访问设置方法)
- laravel实现跨域访问(使用laravel和ajax实现整个页面无刷新的操作方法)
- laravel跨域设置(解决Laravel自定义类引入和命名空间的问题)
- iframe跨域原理(详解使用postMessage解决iframe跨域通信问题)
- axios如何跨域请求(axios取消请求与避免重复请求)
- html5 postMessage(html5关于外链嵌入页面通信问题postMessage解决跨域通信)
- laravel设置跨域请求(解决laravel 出现ajax请求419unknown status的问题)
- iframe嵌入页面跨域(使用iframe+postMessage实现页面跨域通信的示例代码)
- thinkphp5.1修改(ThinkPHP 5.1 跨域配置方法)
- 如何解决php跨域问题(php简单检测404页面的方法示例)
- javascript如何跨域
- vue跨域代理怎么写(解决vue $http的get和post请求跨域问题)
- iframe如何解决跨域问题(关于iframe跨域使用postMessage的实现)
- iframe解决跨域问题(跨域修改iframe页面内容详解)
- 入秋后的第二场苹果发布会来了 全新M1系列芯片登场(入秋后的第二场苹果发布会来了)
- 苹果正式发布自研芯片M1 5nm 32核心 彻底放弃Intel(苹果正式发布自研芯片M1)
- 苹果自研芯片跑分对比 A16芯片排名靠后,M1系列霸榜(苹果自研芯片跑分对比)
- X86处理器的梦魇 苹果M1自研芯片到底有多强(苹果M1自研芯片到底有多强)
- 泰剧《爱欲之神》Boom kitkong和Great合体杂志(泰剧爱欲之神Boomkitkong和Great合体杂志)
- 素人恋爱综艺火药味十足 男生为赢得芳心集体扯头花,真是出好戏(素人恋爱综艺火药味十足)
热门推荐
- 当前云服务器设置方法(如何使用云服务器?四招教你玩转)
- mysql能groupby两个字段吗(MySQL group by语句如何优化)
- python opencv图像合并(Python3+OpenCV2实现图像的几何变换平移、镜像、缩放、旋转、仿射)
- mysql常见错误提示及解决办法(MYSQL 无法识别中文的永久解决方法)
- 阿里云centos7java服务器搭建(阿里云 ubuntu16.04搭建IPSec服务)
- 怎么使用阿里云cdn(阿里云CDN加速和全站加速DCDN区别及如何选择)
- 安装laravel框架(laravel框架的安装与路由实例分析)
- pyqt5实例讲解(PyQt5实现简易计算器)
- laravel怎样封装增删改查(laravel框架上传图片实现实时预览功能)
- html锚点定位
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9