美文网首页
js 的跨域操作 window.name 和 jsonp

js 的跨域操作 window.name 和 jsonp

作者: debug007 | 来源:发表于2015-12-02 13:05 被阅读448次

JavaScript中的跨域方式有两种

window.name的基本原理

A网站通过JS访问B网站的数据,首先在A网站中创建一个页面, 原理就是将数据,通过iframe的url来获取服务器数据,并监听页面的onload事件,获取window.name的值,传给回调函数,实现跨域, 页面A调用代码如下:

<head>
<title>跨域获取数据</title>
<script type ="text/javascript">
function domainData(url, fn){
  var isFirst = true;
  var iframe = document.createElement('iframe');
  iframe.style.display = 'none';
  var loadfn = function(){
    if(isFirst){
      iframe.contentWindow.location = 'http://a.com/null.html](http://a.com/null.html';
      isFirst = false;
    } else {
      fn(iframe.contentWindow.name);
      iframe.contentWindow.document.write('');
      iframe.contentWindow.close();
      document.body.removeChild(iframe);
      iframe.src = '';
      iframe = null;
    };
};

iframe.src = url;
if(iframe.attachEvent){
  iframe.attachEvent('onload', loadfn);
} else {
iframe.onload = loadfn;
}

document.body.appendChild(iframe);
}

</script>
</head>
</body>

<script type ="text/javascript">
  domainData('http://b.com/data.html', function(data){
  alert(data);
});

B网站中放一个存储数据的页面,代码如下:

<script>
  window.name = '需要跨域传递的数据';
</script>

jsonp的基本原理

由于浏览器当问js文件是可以跨域的,所以服务器请求的响应类型为"application/javascript",让浏览器认为该请求是一个js请求,客户端传入jsonpCallback,从而实现跨域,服务器响应之后调用userinfo_jsonpCallback这个方法时,就可以拿到数据:{'name':'weixin','age':8},jquery封装之后,请求响应完毕直接回调success方法, 服务器端的响应如下:

userinfo_jsonpCallback({'name':'weixin','age':8});

$.ajax({
        type: "get",
        url: "http://cache.zhushou001.com/api/v1/user.jsonp",
        data: userData,
        dataType: "jsonp",
        jsonp: "callback",
        jsonpCallback: "userinfo_jsonpCallback",
        success: function (data) {
           
        },
        error: function (data) {
            console && console.log('获取用户信息失败');
        }
    });

相关文章

  • js 的跨域操作 window.name 和 jsonp

    JavaScript中的跨域方式有两种 window.name的基本原理 A网站通过JS访问B网站的数据,首先在A...

  • 前端面试题

    1、有几种方式可以解决跨域请求? Jsonp、iframe、window.name、cors、img.src ht...

  • 跨域的解决方式

    一、 JSONP操作跨域 原理:利用 标签没有跨域限制(可以加载其它域选下的js),网页可以得到从其他来源动态...

  • 跨域

    跨域 什么是跨域: 解决跨域 通过jsonp原理:在页面引入跨域js和css时,没有存在跨域问题.因此可以动态创建...

  • Ajax下

    一、cors跨域请求 二、jsonp百度搜索的例子 jsonp.html jsonp.js

  • JS访问后台服务与JSONP使用

    JS访问后台服务JSONP 1. XMLhtmlRequest 2. JSON 3. JSONP跨域 ...

  • 实现前端跨域的几种方式

    1、jsonp跨域实现方式 server.js 2、CORS跨域实现方式 index.html server1.j...

  • 跨域的4种实现方式

    1.使用JSONP实现跨域 HTML代码 server.js 2.使用CORS实现跨域 html代码 server...

  • 手机端跨域的两种方式,如何连到电脑端的服务器接口

    /** 一:js直接跨域提交(这个看上去像ajax,然后利用jsonP进行跨域,注意url写法) **/ 这个方法...

  • 跨域

    跨域的几种方法 通过jsonp跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以...

网友评论

      本文标题:js 的跨域操作 window.name 和 jsonp

      本文链接:https://www.haomeiwen.com/subject/jiajhttx.html