美文网首页
javaScript常见的跨域的方式

javaScript常见的跨域的方式

作者: 月满轩 | 来源:发表于2017-01-15 11:29 被阅读0次

跨域指的就是js在不同域名之间进行的数据通信。
所谓同源指的就是协议,域名,端口号这三者必须都相同,如果有一个不同,那么也不能叫做同源。在使用ajax通信,或者是iframe多窗口之间进行通信的时候,需要注意同源策略带来的影响。
常见的跨域的几种方式:
1,jsonp跨域的方式
jsonp是一种非正式的协议,这个协议允许用户传递一个callback参数到服务器端,然后服务器端把这个参数名当做js的函数名来包裹住JSON数据。使用jsonp的跨域方式是需要服务器端进行配合的。
底层原理就是动态生成一个<script>标签,通过src的属性来进行跨域请求文件,当文件下载成功之后,会执行callback后面的参数,这个时候就能获取到了。

2,使用window.name
假如你的应用不是单页面的,这个时候有一个a.htmlb.html,他们都在同一个地址下http://www.test.com/crossdomain 这个时候如果想要把a.html中的值传入到b.html中,可以使用window.name的方式。

 //a.html
<script>
      window.name = " 我是a页面的值 "
      setTimeout( function(){
        window.location.href = ' b.html ';
      } , 1000)
</script>

//b.html
<script>
  console.log(window.name)   //"我是a页面的值"
  //这个时候就会发现,b页面已经获取到a页面中的值了。
  //注意,window.name 只能接收字符串的形式,如果你想传递一个对象的话,可以先使用JSON.stringify()的方式把对象转换为json格式,然后在b页面通过JSON.parse()进行解析。
</script>

上面的这种方式只是简单的两个页面处于同源下的页面间数据传递的一种方式。

如果想要跨域的情况下是不能直接使用的,这个时候就需要一个代理了(proxy) , 可以使用隐藏的iframe的方式来实现。

/*
假如现在有两个页面,a页面和一个提供数据源的页面dataSource.html。我想让a页面获取到dataSource中的数据。
a页面,http://www.abc.com/test/a.html
dataSource,http://www.ad.com/data/dataSource.htm
这个时候a页面是不能直接获取到dataSource提供的数据的。 需要有一个隐藏的代理,iframe
*/
<body>
  <iframe 
            src='http://www.ad.com/data/dataSource.htm'
            id='myiframe'>
</iframe>
    <script>
           function $(id){ return document.getElementById(id)}
  //必须要等iframe onload才能执行下一步动作
  $('myiframe').onload = function(){
      var data = $('myiframe').contentWindow.name;
  } 
 $('myiframe').src = "abount:blank"; //把iframe的src修改为和a页面同源。这样a页面可以获取iframe中的数据。

/*
*dataSource中的代码
*/
<body>
    <script>
        window.name = "{ name : 'smith' , age : 20 }"
   </script>
</body>
   </script>
</body>

这样就能够实现跨域请求的方式了。

3 , 通过h5的postMessage的方式来实现。
postMessage的应用场景
1,多页面之间的数据传递
2,页面和嵌套的iframe之间的传递

postMessage接收两个参数data : 要传递的数据,字符串形式 , origin : 源,指的是数据要发送的页面。

<body>
  <iframe src = ' b.html ' id=' iframeNode '></iframe>
  <script>
      window.postMessage( '发送数据到iframe' , “*”);
      var iframeNode = document.getElementById('iframeNode');
</script>
</body>

//iframe中
<body>
  <script>
    window.onmessage = function(e){
          log(e.data)
    }
</script>
</body>

相关文章

  • javaScript常见的跨域的方式

    跨域指的就是js在不同域名之间进行的数据通信。所谓同源指的就是协议,域名,端口号这三者必须都相同,如果有一个不同,...

  • #hello,JS:15 同源策略 & 跨域(JSONP)

    跨域有几种常见的方式?你有没有跨域使用的经验? 方式: 使用jsonp实现跨域?使用cors实现跨域?浏览器另类的...

  • js跨域问题

    来源 javascript中实现跨域的方式总结 第一种方式:jsonp请求;jsonp的原理是利用 标签的跨域特性...

  • 跨域的解决方式

    跨域有很多种方式,下面就简单说说跨域最常见的几种解决方式1、JSONPJSONP是服务器与客户端跨源通信的常用方法...

  • WebStorm本地调试的跨域问题

    JavaScript 跨域 首先什么是跨域,简单地理解就是因为JavaScript同源策略的限制,a.com 域名...

  • HTML-获取iframe元素的正确方法

    跨域相关文章详解js跨域问题JavaScript跨域总结与解决办法 解释最清楚的jsonpWhat is JSON...

  • 常见跨域解决方式

    跨域 浏览器发送的请求地址(URL)与所在页面的地址 不同(端口/协议/域名 其一不同)。简言之,浏览器发出的请求...

  • jsonp,ajax,json的问题

    JSONP JSONP是解决跨域问题的一种常见方式 跨域问题:因为浏览器有同源策略,所以当不同域间进行数据交互的时...

  • Javascript跨域整理

    在前端的JS请求中,跨域的问题经常存在,根据不同的实现原理,常见的跨域的方法如下: 一:前端的方式 1:在前端页面...

  • SSM框架配置CORS跨域

    什么是跨域? 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。 常见的跨域场景: 跨域资...

网友评论

      本文标题:javaScript常见的跨域的方式

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