`

javascript跨域访问

阅读更多
javascript跨域访问是web开发者经常遇到的问题。

A.同源策略
 
同源策略,它是由Netscape提出的一个著名的安全策略。
现在所有支持JavaScript 的浏览器都会使用这个策略。
所谓同源是指,域名,协议,端口相同。
当一个浏览器的两个tab页中分别打开来 百度和谷歌的页面
当浏览器的百度tab页执行一个脚本的时候会检查这个脚本是属于哪个页面的,
即检查是否同源,只有和百度同源的脚本才会被执行。

B. 跨域

那么跨域指的就是 域名,协议,端口有一个不相同

什么是跨域,一个域上加载的脚本获取或操作另一个域上的文档属性,下面将列出三种实现javascript跨域方法:

1.基于iframe实现跨域

     基于iframe实现的跨域要求两个域具有aa.xx.com,bb.xx.com这种特点,也就是两个页面必须属于一个基础域(例如都是xxx.com,或是xxx.com.cn),使用同一协议(例如都是 http)和同一端口(例如都是80),这样在两个页面中同时添加document.domain,就可以实现父页面调用子页面的函数,代码如下:
页面一:
Html代码 
<html>  
<head>  
  <script>  
   document.domain = "xx.com";  
    function aa(){  
      alert("p");  
   }  
  </script>  
</head>  
<body>  
   <iframe src="http://localhost:8080/CmsUI/2.html" id="i">  
     
   </iframe>  
   <script>  
  document.getElementById('i').onload = function(){  
     var d = document.getElementById('i').contentWindow;  
     d.a();  
       
 };  
   </script>  
 </body>  
</html>  


页面二:
Html代码 
<html>  
 <head>  
  <script>  
    document.domain = "xx.com";  
    function a(){  
    alert("c");  
     }  
  </script>  
 </head>  
 <body>  
 </body>  
</html>  


这时候父页面就可以调用子页面的a函数,实现js跨域访问

2.基于script标签实现跨域

     script标签本身就可以访问其它域的资源,不受浏览器同源策略的限制,可以通过在页面动态创建script标签,代码如下:

Java代码 
var script = document.createElement('script'); 
script.src = "http://aa.xx.com/js/*.js"; 
document.body.appendChild(script); 


     这样通过动态创建script标签就可以加载其它域的js文件,然后通过本页面就可以调用加载后js文件的函数,这样做的缺陷就是不能加载其它域的文档,只能是js文件,jsonp便是通过这种方式实现的,jsonp通过向其它域传入一个callback参数,通过其他域的后台将callback参数值和json串包装成javascript函数返回,因为是通过script标签发出的请求,浏览器会将返回来的字符串按照javascript进行解析执行,实现了域与域之间的数据传输。
jquery中对jsonp的支持也是基于此方案。

3.后台代理方式

     这种方式可以解决所有跨域问题,也就是将后台作为代理,每次对其它域的请求转交给本域的后台,本域的后台通过模拟http请求去访问其它域,再将返回的结果返回给前台,这样做的好处是,无论访问的是文档,还是js文件都可以实现跨域。
分享到:
评论

相关推荐

    Javascript跨域访问解决方案

    Javascript跨域访问解决方案 个人在网上搜集的资料,用于传输信息,不提倡下载

    javascript跨域访问的方法.pdf

    ...

    javascript跨域访问的方法.docx

    ...

    Javascript 跨域访问解决方案

    由于安全方面的考虑,Javascript被限制了跨域访问的能力,但是有时候我们希望能够做一些合理的跨域访问的事情,那么怎么办呢?

    JS跨域访问

    javascript 跨域访问 综合解决方案

    js实现跨域访问的三种方法

    javascript跨域访问是web开发者经常遇到的问题,什么是跨域,一个域上加载的脚本获取或操作另一个域上的文档属性,下面将列出三种实现javascript跨域方法: 1.基于iframe实现跨域 基于iframe实现的跨域要求两个域...

    javascript跨域方法、原理以及出现问题解决方法(详解)

    javascript跨域访问是web开发者经常遇到的问题,什么是跨域,一个域上加载的脚本获取或操作另一个域上的文档属性,下面将列出三种实现javascript跨域方法: 1.基于iframe实现跨域  基于iframe实现的跨域要求两个域...

    jquery跨域访问

    jquery跨域访问服务器,用的是一个jquery的插件,要配合jquery使用。 &lt;script type="text/javascript"&gt; $(document).ready( function(){ $.get('http://smallbridge.sinaapp.com/', function(res){ $('#testdiv')....

    javascript/jquery 跨域访问

    NULL 博文链接:https://y-l.iteye.com/blog/2074102

    JavaScript同源策略和跨域访问实例详解

    本文实例讲述了JavaScript同源策略和跨域访问。分享给大家供大家参考,具体如下: 1. 什么是同源策略 理解跨域首先必须要了解同源策略。同源策略是浏览器上为安全性考虑实施的非常重要的安全策略。 何谓同源: URL由...

    easyXDM.zip_opera_跨域

    javascript跨域访问的类,支持所有主流浏览器,包括IE6+,FileFox,Chrome,Safari,Opera等,包含了目前所有的主流跨域方式

    JavaScript cookie 跨域访问之广告推广

    主要介绍了JavaScript cookie 跨域访问之广告推广 的相关资料,需要的朋友可以参考下

    flash跨域访问

    &lt;script type="text/javascript"&gt; $(document).ready(function() { $.ajaxf.install('/Files/zsea/AJAX.swf'); $("#fdemo_get").click(function() { $.ajaxf.getText("http://www.youku.com/", '', function(r) ...

    ASP.NET MVC中EasyUI的datagrid跨域调用实现代码

    最近项目中需要跨域调用其他项目的数据,其他项目也是使用的EasyUI的datagrid组件,开始以为直接在datagrid的... 搜索了下JavaScript跨域调用的文章“JavaScript跨域访问问题解决方法”得到启发,发现原来是因为easyU

    arcgis api for js 4.x 在tomcat离线部署后,跨域访问问题

    arcgis api for js 4.x 在tomcat离线部署后,跨域访问问题,彻底解决。

    apache+jwchat原码,自己亲测试可用

    2.2.17-win32-x86-no_ssl.msi,安装完成后,我们需要配置一下,由于jwchat是用javacript去和openfire进行通讯的,所以他们之间的通讯是基于http的,但是由于浏览器为了安全性是不允许javascript跨域访问的。...

    javascript 跨域问题以及解决办法

    javascript 跨域问题以及解决办法 什么是跨域问题? 跨域这个问题是由于浏览器的同源策略引起的,请求的URL地址,必须与浏览器的URL是相同协议、相同域名、相同端口的,否则是不允许访问的 浏览器URL 要访问的...

    ajax跨域访问案例.zip

    个人学习时编写的代码,该案例用于演示Ajax的跨域访问问题。!!!补充说明:导入工程时需要选择导入maven工程!上传仅为学习交流,也为自己下载方便!水平有限不喜勿喷。在README.txt中有对项目的详细说明!

    AJAX javascript的跨域访问执行

    在网站调用加载评论等信息的时候遇到了不同域名间javascript不能执行的问题,一直都在加载中显示不出来,而换个网址访问的话就能正确显示,一直没去注意浏览器提示的错误信息:

Global site tag (gtag.js) - Google Analytics