JS跨域分析判断

  JS跨域:在不同域之间,JS进行数据传输或通信。比如ajax向不同的域请求数据、JS获取iframe中的页面中的值(iframe内外不同域)

  只要协议、端口、域名有一个不同则被当做不同的域

  下表给出了相对于http://www.dmeiyang.com同源检测结果:

  

    Jsonp跨域方法及原理

  在JS中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。

  引入不同JS文件实现

  在http://localhost:2014站点中有一个页面,现在需要请求http://localhost:2013/CrossDomain/GetJsonpData的数据。很明显这两不在一个域上,为了实现这个功能,我们可以这样写代码:

<script type="text/javascript">
function dosomething(jsondata) {
console.log(jsondata);
}
</script>
<script src="http://localhost:2013/CrossDomain/GetJsonpData?jsoncallback=dosomething"></script>

  这里我们看到在请求地址后面有一个jsoncallback参数,惯例是使用callback这个参数名,但是如果http://localhost:2013这个站点不是你自己能控制的,就只能按照提供数据那一方的规定格式来操作了

  下面是http://localhost:2013/CrossDomain/GetJsonpData定义的规则和返回数据

public string GetJsonpData(string jsoncallback)
{
//返回数据格式:jsoncallback({"Name":"dmeiyang","Age":20}) System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append(jsoncallback);
sb.AppendFormat("({0})", new { Name = "dmeiyang", Age = }.ToJsonByJsonNet()); return sb.ToString();
}

  通过JQuery实现

  后台代码不变,前台部分代码如下:

<div id="container">
<div>我要访问http://localhost:2013站点的数据</div>
<div>
<a class="at-jsonp" href="javascript:void(0);">点击一下,给我数据~</a>
</div>
<div>
<span>其他站点数据:</span>
<span class="data-jsonp" style="color: red"></span>
</div>
</div>
<script type="text/javascript">
$(function () {
$('#container .at-jsonp').on('click', function () {
$.ajax({
async: false,
url: "http://localhost:2013/CrossDomain/GetJsonpData",
type: "GET",
dataType: 'jsonp',
//jsonp的值自定义,如果使用jsoncallback,那么服务器端,要返回一个jsoncallback的值对应的对象.
jsonp: 'jsoncallback',
//要传递的参数,没有传参时,也一定要写上
data: { jsoncallback: "jsoncallback" },
timeout: ,
//返回Json类型
contentType: "application/json;utf-8",
//服务器段返回的对象包含name,data属性.
success: function (result) {
$('#container .data-jsonp').text('名称:' + result.Name + '-->年龄:' + result.Age);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus);
}
});
})
})
</script>
    通过修改document.domain来跨子域

  浏览器遵循同源策略。第一个限制是:不能通过ajax请求不同域下的数据(除非使用Jsonp);第二个限制是:不同域框架(iframe内外)之间不能进行js交互

  例如:http://localhost:2014页面(A页)中放置一个iframe,让其加载http://localhost:2013/CrossDomain/iframetest页面(B页)。因为两者不同域,所以A页面是无法通过JS获取B页面里的内容的(当然你可以获取一个几乎无用的window对象)

  为了实现上述情况两个页面之间可以互相调取数据,需要设置document.domain=“自身或者更高一级的父域”(两个页面都需要设置)

JS跨域方法及原理的更多相关文章

  1. 前端Js跨域方法汇总—剪不断,理还乱,是跨域

    1.通过jsonp跨域2.通过修改document.domain来跨子域(iframe)3.隐藏的iframe+window.name跨域4.iframe+跨文档消息传递(XDM)5.跨域资源共享 C ...

  2. asp.net js 跨域方法二

    @{     Layout = null; } <!DOCTYPE html> <html> <head>     <meta name="view ...

  3. js中几种实用的跨域方法原理详解(转)

    今天研究js跨域问题的时候发现一篇好博,非常详细地讲解了js几种跨域方法的原理,特分享一下. 原博地址:http://www.cnblogs.com/2050/p/3191744.html 下面正文开 ...

  4. JQuery和原生JS跨域加载JSON数据或HTML。

    前提:有时候需要在网页上,加载另一个网站上的数据.或者加载另一个网站上的一个页面.Js的Ajax请求不具备跨域功能,可以使用JQuery来实现. 网页端JS代码: $(function () { $. ...

  5. js中几种实用的跨域方法原理详解

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  6. JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  7. 【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  8. [转]js中几种实用的跨域方法原理详解

    转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...

  9. js中几种实用的跨域方法原理详解【转】

    源地址:http://www.cnblogs.com/2050/p/3191744.html 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通 ...

随机推荐

  1. MySQL版本调研

    1引言 1.1 编写目的 本文的主要目的是通过对当前项目中使用的各种版本的数据库进行比较,分析各自特性和稳定程度,最终推荐合适的版本作为今后的标准数据库. 1.2 背景 当前,部门负责管理维护的现网使 ...

  2. lib制作

    生成模拟器和真机通用lib命令: lipo -create libKIF-os.a libKIF-simulator.a -output libKIF.a. 需要cd到  愿文件.a所在的目录. li ...

  3. mjrefresh源码分析

    最近想自己写个下拉刷新的库,但是始终感觉无从下手,想想总是容易的.原理也很简单,真正要下手写的时候,呵呵.不得不说ios封装得很好,网上可以用的成熟的库也很多,也正是因为如此很多开发者也忽略了很多底层 ...

  4. android Camera使用(一)

    现在的App不可避免的要使用到手机的相机功能 首先我们先来介绍下最简单的一个实现方式,启动系统自带的Activity 上代码: public void openCamera() { Intent i= ...

  5. VS2010插件及快捷键设置

    几个常用的Visual Studio插件,番茄助手以及如下的插件,具体作用可用通过Google自行获取. 安装番茄助手后,可用在源文件和头文件中快速切换.但为了更方便使用,建议设置快捷键. vs201 ...

  6. JavaScript 性能优化1

    一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对javascript理解的还不够透彻异或是自己太笨,更多的是自己不擅于 ...

  7. ajax 的简单应用

    ajax作为前端技术,采用异步方式,根据其采用的方式来讲,不用刷新界面,只是进行数据的传递. 后台还是用servlet的.servlet接收到ajax的get或post请求后.将数据组装成xml或者j ...

  8. 现代福尔摩斯 - Oxygen Forensic Suite

    各位可曾听说过智能手机取证软件Oxygen Forensic Suite,它的logo是名侦探福尔摩斯一手抽着他的招牌雪茄,一手拿着放大镜,全神贯注地正进行调查工作. 使用过它的取证人员必定会对它的提 ...

  9. CSS3 background-size图片自适应

    转自:http://www.html5cn.com.cn/css3/2013-04-21/267.html: background-size属性和background-origin属性.backgro ...

  10. 1.4Linux内核版本号的定义规则

    Linux内核版本号的组成: (1)主版本号: (2)次版本号: (3)修订版本号: (4)微调版本号: (5)为特定的Linux系统特别调校的描述: 例子:2.6.29.7-flykernel-12 ...