跨域

1.jsonp

原生js

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        li{
            list-style: none;
        }
    </style>
</head>
<body>
    <h1>淘宝提示词</h1>
    <input type="text" placeholder="请输入关键词" id="txt"><br>
    <ul id="uu"></ul>
    <script>
        class jsonpTest {
            constructor() {
                this.txt = txt;
                this.list = uu;
                this.body = document.body;
                this.init();
            }
            init() {
                this.watchTxt();
            }
            watchTxt() {
                this.txt.onkeyup = () => {
                    if(this.txt.value.length == 0) {
                        this.list.innerHTML = '';
                        return;
                    }
                    const script = document.createElement('script');
                    script.src = 'https://suggest.taobao.com/sug?q='+this.txt.value+'&callback=jsonp.sug';
                    this.body.appendChild(script);
                    this.body.removeChild(script);
                }
            }
            sug(data) {
                var str = '';
                data.result.forEach((item, i) => {
                    str += '<li>' + item[] + '</li>';
                })
                this.list.innerHTML = str;
            }
        }
        const jsonp = new jsonpTest();
        
    </script>
</body>
</html>

jquery

$(document).ready(function(){
   $('#btn').click(function(){
       var txt = $('#txt').val();
       var url = 'https://suggest.taobao.com/sug?q='+txt;
       $.ajax({
           url: url,
           dataType: 'jsonp',
           type: 'get',
           success: function(data){
               var str='';
               if(data.result.length !== 0) {
                   for(let i=0; i<data.result.length; i++) {
                       str += '<li>' + data.result[i] + '</li>';
                   }
                   $('#uu').html(str);
               }else {
                   str = '未找到关键字';
                   $('#uu').html(str);
               }
           }
       })
   }) 
})

document.domain+iframe

首先在父窗口上添加document.domain

<script>
	document.domain = 'a.com';
</script>

在子窗口里也添加document.domain

<script>
	document.domain = 'a.com';
</script>

在火狐浏览器下,要在iframe外面添加一个div

父窗口和子窗口设置相同的二级域名

// 在one中写一个(域名为www.js8.in)
<iframe src="http://work.js8.in/crossdomain/iframe.html" id="iframe" style="display:none;"></iframe>

<script type="text/javascript">
  document.domain = 'js8.in';//相同的二级域名
  function crossDomain(){
   var iframe=document.getElementById('iframe').contentWindow.$;       
        iframe.get("http://work.js8.in/crossdomain/helloworld.txt",function(data){
            document.getElementById("ajax").innerHTML=data;
        });
  }
 </script>

// 在资源 src="http://work.js8.in/crossdomain/iframe.html"   iframe.html中设置
document.domain = 'js8.in';//相同的二级域名

postMessage

window.postMessage(msg,targetOrigin)
window: 指目标窗口,可能是window.frames属性的成员或者由window.open方法创建的窗口
message:要发送的消息,html5规范中提到该参数可以是JavaScript的任意基本类型或可复制的对象,然而并不是所有浏览器都做到了这点儿,部分浏览器只能处理字符串参数,所以我们在传递参数的时候需要使用JSON.stringify()方法对对象参数序列化,在低版本IE中引用json2.js可以实现类似效果
targetOrigin:“目标域“,包括:协议、主机名、端口号。若指定为”*“,则表示可以传递给任意窗口,指定为”/“,则表示和当前窗口的同源窗口。
获取postMessage传来的消息:为页面添加onmessage事件

 window.addEventListener('message',function(e) {
}

e的几个重要属性:
1、data:postMessage传递过来的msg
2、发送消息的窗口对象
3、origin:发送消息窗口的源(协议+主机+端口号)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值