4种跨域方法介绍

1.jsonp

jsonp的实现方式其实很简单,ajax不允许我跨域访问,但是可以从外部引入js文件。所以需要后台将逻辑写在JS文件里,前端再通过script标签将其引入进文档在设置好对应的回调函数即可。


实例:

天猫jsonp跨域搜索(截取实现部分)

                //添加脚本部分

                var oScript = document.createElement("script")  // 定义脚本标签
                oScript.src = "https://suggest.taobao.com/sug?code=utf-8&q="+this.value+"&_ksTS=1490258855704_564&callback=tmallSearch.callback"  //传递参数并设置回调参数
                document.body.appendChild(oScript)  //向文档中添加脚本
                document.body.removeChild(oScript)  //脚本添加即执行,所以不删除的话会导致页面里大量的重复脚本

回调部分:

                callback: function(data){
                    data !== null ? this.success(data) : this.fail(data)  //
                  },


2.cors

出于安全性考虑,在ajax跨域时会请求失败。但是在服务器端的返回报头上添加一串参数即可允许前端进行跨域访问。

服务器端返回报头中设置字段"Access-Control-Allow-Origin" 值为

"*"
这串报头意思是允许指定前端通过ajax来请求文件,其值代表允许方域 * 代表允许任何人访问。

3.降域

通过修改文档domain值来实现降(至同一)域

这部分演示可以在本页面中一起动手实践

首先打开控制台(console)按F12→控制台/console

然后在光标处输入document.domain回车  //"write.blog.csdn.net"

我们刚才访问了本文档的域,值为引号内部分。

实验1:“提升”重新设置域

控制台中输入  document.domain = "aaa.write.blog.csdn.net"  //前部aaa为随意测试用,实验室可替换为任意内容

提示错误:NS_ERROR_DOM_BAD_DOCUMENT_DOMAIN: Illegal document.domain value

结论:不可以“提升”域

实验2:“新定义”域

控制台中输入 document.domain = "write.blog.csdn.net.aaa"

提示错误:NS_ERROR_DOM_BAD_DOCUMENT_DOMAIN: Illegal document.domain value  //事实上无论讲aaa添加在任意部分都是

实验3:降域

控制台中输入 document.domain = "blog.csdn.net"

提示:"blog.csdn.net"  //设置成功,域从先前的"write.blog.csdn.net"修改为"blog.csdn.net"

这意味着什么呢?两个不同域的文件如"aaa.blog.csdn.net"与"bbb.blog.csdn.net"可以通过以上的办法“变成”同域"blog.csdn.net"然后就可以访问了

这种方法局限性也很明显,两个文件需要在相同主体内


4.postmessage

在HTML5中新增了postmessage方法,可以在各个frame之间相互通信

在dom结构中插入iframe页面

主页面JavaScript

        window.οnlοad=function(){
            window.frames[0].postMessage('你猜?',"*");
        }
        window.addEventListener('message',function(e){
            console.log(e.data)
        })

子页面JavaScript

        window.addEventListener('message',function(e){
                var response = e.data + '你猜我猜你猜不猜'
                window.parent.postMessage(response,'*');
            });

打开主页面控制台中可观察到打印值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值